【问题标题】:HTTPBuilder ignoring JVM proxy parameterHTTPBuilder 忽略 JVM 代理参数
【发布时间】:2013-06-24 13:38:59
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    您也可以将代理参数外部化为 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
        )
    }
    

    【讨论】:

    • 我知道我可以这样做,我想知道为什么我必须这样做(为什么-Dhttp.* 参数不起作用)。
    • 通过用户名和密码进行代理认证呢?
    【解决方案2】:

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

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

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

    没测试过你也可以关注this看看能不能用System.setProperty

    【讨论】:

    • run-app 没问题,但我正在考虑部署到 Tomcat 的 Grails 应用程序。
    • 那么我认为答案中提供的link 中的第 3 级适合您的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多