1

外部 Web サービスにアクセスするためにプロキシ サーバーを経由する必要がある環境で実行されている playframework 2 アプリケーションから Web サービスを呼び出そうとしています。私の application.conf ファイルに、次のプロパティを追加しました。

http.proxyPort=8000

http.proxyHost=myproxyhost.innitech.com

私の Play アプリケーション コードでは、システム プロパティにアクセスして、それらが取得されていることを確認できます。ただし、実行時にはプロキシ構成は使用されません。プロキシを使用してサービスにアクセスする必要がない環境でアプリケーションを実行すると、サービス呼び出しは正常に機能します。

play フレームワークを使用してプロキシ経由で Web サービスを呼び出すことは可能ですか?

呼び出しの例を次に示します。

def watched(username: String, password: String): Promise[Seq[Repo]] = {
  val promiseResponse = WS.url(baseUrl + "/user/watched")
    .withAuth(username, password, com.ning.http.client.Realm.AuthScheme.BASIC)
    .get

    promiseResponse.map(_.json.as[Seq[Repo]])
}

次のスタック トレースは、実行時に表示される内容を表しています。

play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[Connec
tException: https://api.github.com/user]]
    at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:82) [p
lay_2.9.1.jar:2.0]
    at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:63) [p
lay_2.9.1.jar:2.0]
    at akka.actor.Actor$class.apply(Actor.scala:290) [akka-actor.jar:2.0]
    at play.core.ActionInvoker.apply(Invoker.scala:61) [play_2.9.1.jar:2.0]
    at akka.actor.ActorCell.invoke(ActorCell.scala:617) [akka-actor.jar:2.0]

    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:179) [akka-actor.jar:2.0]
Caused by: java.net.ConnectException: https://api.github.com/user
    at com.ning.http.client.providers.netty.NettyConnectListener.operationCo
mplete(NettyConnectListener.java:100) ~[async-http-client.jar:na]
    at org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultCh
annelFuture.java:397) ~[netty.jar:na]
    at org.jboss.netty.channel.DefaultChannelFuture.addListener(DefaultChann
elFuture.java:143) ~[netty.jar:na]
    at com.ning.http.client.providers.netty.NettyAsyncHttpProvider.doConnect
(NettyAsyncHttpProvider.java:1004) ~[async-http-client.jar:na]
    at com.ning.http.client.providers.netty.NettyAsyncHttpProvider.execute(N
ettyAsyncHttpProvider.java:829) ~[async-http-client.jar:na]
    at com.ning.http.client.AsyncHttpClient.executeRequest(AsyncHttpClient.j
ava:499) ~[async-http-client.jar:na]
Caused by: java.nio.channels.UnresolvedAddressException: null
    at sun.nio.ch.Net.checkAddress(Net.java:30) ~[na:1.6.0_25]
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:480) ~[na
:1.6.0_25]
    at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.connec
t(NioClientSocketPipelineSink.java:142) ~[netty.jar:na]
    at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.eventS
unk(NioClientSocketPipelineSink.java:105) ~[netty.jar:na]
    at org.jboss.netty.handler.ssl.SslHandler.handleDownstream(SslHandler.ja
va:459) ~[netty.jar:na]
    at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream
(OneToOneEncoder.java:55) ~[netty.jar:na]
4

1 に答える 1

2

github の現在のスナップショットは、Play コンテキストを使用して AsyncHttpClientConfig を構築し、構成を使用して AsynchHttpClient を初期化するため、この問題を修正する必要があります。

lazy val client = {
  import play.api.Play.current
  val config = new AsyncHttpClientConfig.Builder()       
    .setConnectionTimeoutInMs(current.configuration.getMilliseconds("ws.timeout").getOrElse(120000L).toInt)
    .setFollowRedirects(current.configuration.getBoolean("ws.followRedirects").getOrElse(true))
    .setUseProxyProperties(current.configuration.getBoolean("ws.useProxyProperties").getOrElse(true))

  current.configuration.getString("ws.useragent").map { useragent =>
    config.setUserAgent(useragent)
}
new AsyncHttpClient(config.build())

}

于 2012-04-25T15:41:27.003 に答える