流行に乗って、Line botをPlayframework on Herokuで作ったのでメモ。
ここでは、Play WS APIを用い、Fixieのセットアップは済んだものとして進めます。
JVMのシステムパラメータでPROXYを指定する方法
procfileを変更
以下のパラメータを追加する。実際の値は適宜変更のこと。
パラメータ | 値 |
---|---|
http.proxyHost | xxx.usefixie.com |
http.proxyPort | 80 |
http.proxyUser | fixie |
http.proxyPassword | xxxxx |
Proxy-Authorizationヘッダをセットする
def example(implicit ws:WSClient) {
val encodedAuth = new BASE64Encoder().encode(new URL(System.getenv("FIXIE_URL")).getUserInfo.getBytes())
val request = ws.url(LINE_API_URL).withHeaders("Proxy-Authorization" -> s"Basic $encodedAuth")
....
}
これでFixie経由でリクエストが飛ぶようになりますが、これだとすべてのリクエストがFixie経由になってしまいます。
Fixieのtricycleプランは、100MB/月・500リクエスト/月の制限があるので、無駄に使いたくないですね。
同じようにhttp.nonProxyHosts
を指定すればいいですが、Line以外全部登録するとかだるい。
WSProxyServerを使う
def example(implicit ws:WSClient) {
val encodedAuth = new BASE64Encoder().encode(new URL(System.getenv("FIXIE_URL")).getUserInfo.getBytes())
ws.url(LINE_API_URL)
.withHeaders("Proxy-Authorization" -> s"Basic $encodedAuth")
.withProxyServer(
DefaultWSProxyServer(
host = "xxx.usefixie.com",
port = 80,
principal = Some("fixie"),
password = Some("xxxxx")
)
)
....
}
こうすることで、.withProxyServer
したリクエストのみPROXY経由になります。Procfileのパラメータは消しておきましょう。