在使用apache http client发送之前修改请求URI

时间:2017-11-20 21:39:25

标签: apache http url-rewriting apache-httpclient-4.x apache-httpcomponents

我有一个库,调用者可以通过给我HttpUriRequest(Apache HTTP客户端)对象来发送HTTP请求。在某些情况下,由于某些隧道应该对调用者透明,我需要修改请求的URL以使用HTTP而不是HTTPS。

我该怎么做呢?似乎我无法在对象上正确地改变它。我唯一能看到的是创建一个新的HttpUriRequest对象,该对象是另一个的克隆,但URL已更改。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

可以使用自定义路由规划器将传出请求重新路由到不同的主机/路由

CloseableHttpClient client = HttpClients.custom()
        .setRoutePlanner(new DefaultRoutePlanner(DefaultSchemePortResolver.INSTANCE) {

            @Override
            public HttpRoute determineRoute(
                    final HttpHost target,
                    final HttpRequest request,
                    final HttpContext context) throws HttpException {
                return super.determineRoute(
                        target.getHostName().equals("overhere") ? new HttpHost("overthere", -1, "https") : target,
                        request,
                        context);
            }
        })
        .build();