6

我正在尝试(在 IntelliJ IDE 或从 sbt 命令行)从代理后面执行这个非常基本的调度片段:

import dispatch._
val svc = url("http://api.hostip.info/country.php")
val country = Http(svc > as.String)
println(country())

我能得到的只是一个例外:

java.net.ConnectException: Connection timed out: no further information to
    http://api.hostip.info/country.php java.util.concurrent.ExecutionException:
       java.net.ConnectException: Connection timed out: no further information 
            to http://api.hostip.info/country.php

我尝试设置通常的 vm 参数但没有确凿的结果: -Dhttp.proxyHost=_my_proxy_host_ -Dhttp.proxyPort=80 并且仍然得到相同的异常。

另一方面,以下代码段运行良好:

import dispatch._
val svc = url("http://api.hostip.info/country.php") setProxyServer(new com.ning.http.client.ProxyServer(myproxyhost,80))
val country = Http(svc > as.String)
println(country())

由于它看起来不太美观也不是 scala-ish,我想知道在这种情况下这是否真的是我应该做的。

欢迎任何帮助,在此先感谢。

4

2 回答 2

9

http.proxyHost如果您设置此参数,http.proxyPort将使用:

-Dcom.ning.http.client.AsyncHttpClientConfig.useProxyProperties=true

另外还有参数:

-Dcom.ning.http.client.AsyncHttpClientConfig.proxy.user=user
-Dcom.ning.http.client.AsyncHttpClientConfig.proxy.password=password
-Dcom.ning.http.client.AsyncHttpClientConfig.proxy.protocol=NTLM
于 2013-01-22T10:51:19.573 回答
4

看来我的问题不是很有启发性。

我在图书馆风格的皮条客上做了一些小练习:

package dispatch

package object ext {
    import com.ning.http.client.ProxyServer

  class DefaultPoxyVerbs(override val subject: Req) extends  ProxyVerbs

  object NoProxy extends ProxyServer("",0)

  object Proxy {
    def apply(host: String,port: Int) = new ProxyServer(host,port)
  }

  trait ProxyVerbs extends RequestVerbs {

    def through(proxy : ProxyServer) =
      if (NoProxy == proxy) subject else subject.setProxyServer(proxy)

    def ||>(proxy : ProxyServer) = through(proxy)

  }

  implicit def implyProxyVerbs(builder: Req) =
    new DefaultPoxyVerbs(builder)
}

现在我可以写:

  import dispatch._
  import dispatch.ext._

  val svc = url("http://api.hostip.info/country.php") through Proxy("blah blah blah",80)

  val country = Http(svc > as.String)
  println(country())

就调度 api 风格而言,这更令人赏心悦目和连贯。

虽然这是一个有趣的练习,但我现在仍然不知道我最初是否按照我应该的方式使用 api,也不知道为什么设置 http.proxyHosthttp.proxyPort属性不起作用,因为它似乎适用于其他人

于 2013-01-11T13:30:22.210 回答