HTTPBuilder忽略JVM代理参数

时间:2013-06-27 07:01:49

标签: grails groovy apache-httpclient-4.x httpbuilder

我需要通过代理来访问我的目标服务器。似乎我可以使用这样的代码来完成它:

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

不应该这样吗?


真正的问题是我在Grails应用程序中使用HTTPBuilder并且期望使用-Dhttp.proxyHost-Dhttp.proxyPort启动Tomcat会让HTTPBuilder通过代理...但是HTTPBuilder忽略了那些JVM参数。


看起来httpclient可以配置为使用这样的JVM参数:client.getHostConfiguration().setProxy(host, port)(来自this stackoverflow question)。这可以在HTTPBuilder中完成(我不知道如何引用底层httpclient)?

2 个答案:

答案 0 :(得分:0)

您还可以将代理参数外部化为Config.groovy,然后通过配置设置代理信息。

如何外部化配置的一些示例:

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

答案 1 :(得分:-1)

AFAIK,在Grails应用程序的上下文中,我们可以为Tomcat本身提供主机和端口,但无法定义HTTP调用在服务器启动期间如何通过代理的行为。

您的应用需要add-proxyset-proxy设置才能通过代理somesite.com连接到proxy.com。例如:

grails add-proxy client --host=proxy.com --port=8080 
       --username=guest --password=guest
grails set-proxy client

未经过测试,您也可以按this查看是否可以使用System.setProperty