4

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

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 应用程序中使用,并期望使用启动 Tomcat-Dhttp.proxyHost并且-Dhttp.proxyPortHTTPBuilder通过代理......但这就像HTTPBuilder忽略那些 JVM 参数。


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

4

2 回答 2

0

您还可以将代理参数外部化为 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
    )
}
于 2013-06-27T16:42:58.703 回答
-1

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

您需要add-proxyset-proxysomesite.com设置让您的应用程序通过代理连接到proxy.com. 例如:

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

没测试过你也可以按照这个看看能不能用System.setProperty

于 2013-06-27T13:40:15.333 回答