我需要通过代理才能到达我的目标服务器。看来我可以用这样的代码来做到这一点:

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 
    ) 
} 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!