今回はPlay Framework for Java 2.5.3で確認をしています。
Playは2.xでだいぶ動作が異なることがある( https://www.playframework.com/documentation/2.5.x/Migration25 )ので、他の環境ではわかりません。
対応するべきポイントは2点
Proxyを使う場合は起動オプションを追加したProcfileを用意します。
Procfile
web: target/universal/stage/bin/line-bot-trial -Dhttp.port=${PORT} -Dhttp.proxyHost=XXX.usefixie.com -Dhttp.proxyPort=80 -Dhttp.proxyUser=XXX -Dhttp.proxyPassword=XXX
のようにしてオプションを渡して起動します。
https://www.playframework.com/documentation/2.5.x/ProductionHeroku
Controllerでの呼び出し方
JavaでFixieを使うときは https://devcenter.heroku.com/articles/fixie#using-with-java が非常に参考になります。
ただ、せっかくなのでPlay FrameworkではWSClient( https://www.playframework.com/documentation/2.5.x/JavaWS )を使いたいところ。
public class LineBotController extends Controller { @Inject WSClient ws; public Result callback() { //Fixieのアドオンを入れると、環境変数にProxyのURLが登録されるので、それを呼び出します。 URL proxyUrl = new URL(System.getenv("FIXIE_URL")); String userInfo = proxyUrl.getUserInfo(); String encodedAuth = new BASE64Encoder().encode(userInfo.getBytes()); WSRequest request = ws.url("https://trialbot-api.line.me/v1/events").setHeader("Content-Type", "application/json; charset=UTF-8") .setHeader("X-Line-ChannelID", YOUR_X_LINE_CHANNELID) .setHeader("X-Line-ChannelSecret", YOUR_X_LINE_CHANNELSECRET) .setHeader("X-Line-Trusted-User-With-ACL", YOUR_X_LINE_TRUSTED_USER_WITH_ACL) .setHeader("Proxy-Authorization", "Basic " + encodedAuth).setRequestTimeout(10000); ObjectNode result = Json.newObject(); //resultに適宜データをぶち込みます。 CompletionStage<WSResponse> post = request.post(result); return ok(""); } }
Proxy-AuthorizationのHeaderを追加するのが大事な点でしょうか。(起動時のオプションでProxyのusername,passwordを渡しているので、application.confの設定でそのあたりをよろしく処理してくれる方法ありそうではありますが、わかりませんでした。)