Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在使用apache http客户端发送请求URI之前修改请求URI_Java_Http_Url Rewriting_Apache Httpclient 4.x_Apache Httpcomponents - Fatal编程技术网

Java 在使用apache http客户端发送请求URI之前修改请求URI

Java 在使用apache http客户端发送请求URI之前修改请求URI,java,http,url-rewriting,apache-httpclient-4.x,apache-httpcomponents,Java,Http,Url Rewriting,Apache Httpclient 4.x,Apache Httpcomponents,我有一个库,调用者通过给我HttpUriRequest Apache HTTP客户端对象来发送HTTP请求。在某些情况下,由于某些对调用方透明的隧道,我需要修改请求的URL以使用HTTP而不是HTTPS 我该怎么做呢?看起来我不能在物体上直接改变它。我唯一能看到的是创建一个新的HttpUriRequest对象,它是另一个对象的克隆,但URL已更改 有更好的方法吗?可以使用自定义路由规划器将传出请求重新路由到不同的主机/路由 CloseableHttpClient client = HttpCli

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

我该怎么做呢?看起来我不能在物体上直接改变它。我唯一能看到的是创建一个新的HttpUriRequest对象,它是另一个对象的克隆,但URL已更改


有更好的方法吗?

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

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();

修改整个请求怎么样?4.3似乎没有足够的功能。我需要翻译成http//realdestination.com/realpath/val/val.RequestBuilder在4.3中引入,URIBuilder在4.2中引入,用于救援。我可以在哪里修改它?问题是我没有看到任何可行的注射点。RoutePlanner绝对不是这个地方。我现在使用动态代理包装整个客户端请求拦截器