我需要通过代理才能到达我的目标服务器。看来我可以用这样的代码来做到这一点:
def http = new HTTPBuilder( 'http://www.somesite.com')
http.setProxy('proxy.com', 8080, 'http')
但不是这样:
System.setProperty("http.proxyHost", "proxy.com");
System.setProperty("http.proxyPort", "8080");
def http = new HTTPBuilder( 'http://www.somesite.com')
这不应该工作吗?
真正的问题是我正在使用
HTTPBuilder
从 Grails 应用程序中,并期望使用
-Dhttp.proxyHost
启动 Tomcat和
-Dhttp.proxyPort
会让
HTTPBuilder
通过代理...但它就像
HTTPBuilder
忽略那些 JVM 参数。
它看起来像
httpclient
可以配置为使用 JVM 参数,如下所示:
client.getHostConfiguration().setProxy(host, port)
(来自
this stackoverflow question)。这可以在
HTTPBuilder
中完成吗? (我不知道如何引用底层
httpclient
)?
请您参考如下方法:
您还可以将代理参数外部化到 Config.groovy,然后通过 config 设置您的代理信息。
有关如何外部化配置的一些示例:
http://phatness.com/2010/03/how-to-externalize-your-grails-configuration/
http://www.comitservices.com/wp/?p=133
然后只需从配置中获取您的代理信息
def SomeService {
def grailsApplication
..
def http = new HTTPBuilder( 'http://www.somesite.com')
http.setProxy(
grailsApplication.config.proxyHost,
grailsApplication.config.proxyPort,
grailsApplication.config.proxyScheme
)
}