【问题标题】:running vertx behind a proxy在代理后面运行 vertx
【发布时间】:2014-01-28 20:28:00
【问题描述】:

有没有人幸运地尝试在公司代理中使用 vertx bihind?我已经尝试了任何可能的方法来向vertx提供代理信息。到目前为止没有任何效果。

设置环境变量 http_proxy=http://mycorporate.proxy.com:8080 - 不走运

设置环境变量 VERTX_OPTS='-Dhttp.proxyHost=mycorporate.proxy.com -Dhttp.proxyPort=8080' - 不走运

设置环境变量 http.proxyHost=mycorporate.proxy.com http.proxyPort=8080 运气不好

在 vertx 命令中注入额外的 echo 我可以看到代理相关的参数正在正确地传递给 JVM,但仍然无法下载所需的模块(“vertx run hello.js”显然在尝试下载 io.vertx~lang 时卡住了-rhino~2.0.0-final)

代理本身没问题 - 我将它用于 maven、sbt 和其他需要代理的不同东西没有问题 在家使用的同一台笔记本电脑可以通过下载io.vertx~lang-rhino~2.0.0-final(首次运行)成功运行“vertx run hello.js”

我刚刚开始为我们公司的需求评估 vertx,这是我第一个阻碍我进一步尝试做出决定的瓶颈。到目前为止,我必须按照以下步骤作为解决方法: 1 从家里运行并在 sys-mods 中获取所需的任何模块。 2 回到办公室后,手动将模块上传到测试服务器上的 sys-mods。 显然,这不是运行任何东西的正常方式。

【问题讨论】:

  • 当我解决这个问题时,我指定了手动代理服务器——而不是自动代理服务器。连接后,在成功部署 Verticle 之前,需要为每个要下载的组件调用一次 vert.x。

标签: java proxy vert.x


【解决方案1】:

我有类似的问题。我发现 HttpClient 表单不会从 JVM_OPTS 读取设置。 所以解决方案如下:

编辑你的 vertx.bat(sh)

set JVM_OPTS=-Dhttp.proxyHost=xxxx -Dhttp.proxyPort=xxxx

然后在与 httpClient 相关的代码中尝试这样的操作

   HttpClient client = vertx.createHttpClient();
    String proxyHost = System.getProperty("http.proxyHost", "none");
    Integer proxyPort = Integer.valueOf(System.getProperty("http.proxyPort", "80"));

    if(!"none".equalsIgnoreCase(proxyHost)){

        client.setHost(proxyHost);
        client.setPort(proxyPort);
    }

以及稍后在与 HTTP 请求相关的代码中

   MultiMap map = new CaseInsensitiveMultiMap();
   map.add("Host", domainName); //get domain of REQUESTED_URL                 
   client.getNow(REQUESTED_URL, map, new new Handler<HttpClientResponse>(){...});

【讨论】:

  • 这不起作用,因为 vertx3 http 客户端没有提到的方法(setHost() 和 setPort())。
【解决方案2】:

以@kamyk-pl 答案为基础。如果您使用的是最新版本的 Vertx,您可以这样做:

    WebClientOptions webClientOptions = new WebClientOptions();
    String proxyHost = System.getProperty("http.proxyHost", "none");
    Integer proxyPort = Integer.valueOf(System.getProperty("http.proxyPort", "80"));

    if(!"none".equalsIgnoreCase(proxyHost)){
        ProxyOptions proxyOptions = new ProxyOptions();
        proxyOptions.setHost(proxyHost);
        proxyOptions.setPort(proxyPort);
        webClientOptions.setProxyOptions(proxyOptions);
    }

     WebClient.create(vertx, webClientOptions) 

如果您正在测试 SSL 连接,您也可以选择添加它

        webClientOptions.setVerifyHost(false);
        webClientOptions.setTrustAll(true);

【讨论】:

    【解决方案3】:

    我使用 vertx 3.8.0

                    HttpClient c = vertx.createHttpClient();
                            RequestOptions requestOptions = new RequestOptions();
                            requestOptions.setHost(ip).setPort(port).setURI("http://httpbin.org/ip");
                            c.request(HttpMethod.GET, requestOptions).handler(new Handler<HttpClientResponse>() {
                                @Override
                                public void handle(HttpClientResponse event) {
                                    event.handler(new Handler<Buffer>() {
                                        @Override
                                        public void handle(Buffer event) {
                                            System.out.println(event);
                                        }
                                    });
                                }
                            }).end();
    

    【讨论】:

      【解决方案4】:

      要设置代理,请编辑 vertx.bat(如果您在 Windows 上)并添加

      set JVM_OPTS=-Dhttp.proxyHost=xxxx -Dhttp.proxyPort=xxxx
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-16
        • 2020-06-29
        相关资源
        最近更新 更多