JavaのHTTPUrlConnectionでどうしてもステータス403エラーになってしまっている。curlコマンドでは問題なく動いているのに、その原因を調べた。
まず、 http - How to enable wire logging for a java HttpURLConnection traffic? - Stack Overflow に参考して、ソースコードに
System.setProperty("javax.net.debug","all");
を追加して、実際の通信時の送信したヘッダーを調べた。そうすると、ソースコードで指定していた「Origin」ヘッダーが送信されていなかったことが判明した。
そして、
http - Java JSOUP how to send the Origin in the header - Stack Overflow に参考して、ソースコードに
System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
を追加したら、期待通り「Origin」ヘッダーが送信されることが確認でき、403エラーも解消した。