gpt4 book ai didi

java - 当我为 HttpClient 对象设置代理时会发生什么?

转载 作者:行者123 更新时间:2023-11-30 06:55:57 24 4
gpt4 key购买 nike

我试图了解为 HttpClient 对象设置代理的想法。我发现下面的代码与此相关。

HttpHost proxy = new HttpHost("proxy.com", 80, "http");
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy);
CloseableHttpClient httpclient = HttpClients.custom()
.setRoutePlanner(routePlanner)
.build();

下面的代码,

/**
* How to send a request via proxy.
*
* @since 4.0
*/
public class ClientExecuteProxy {

public static void main(String[] args)throws Exception {
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
HttpHost target = new HttpHost("httpbin.org", 443, "https");
HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http");

RequestConfig config = RequestConfig.custom()
.setProxy(proxy)
.build();
HttpGet request = new HttpGet("/");
request.setConfig(config);

System.out.println("Executing request " + request.getRequestLine() + " to " + target + " via " + proxy);

CloseableHttpResponse response = httpclient.execute(target, request);
try {
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
System.out.println(EntityUtils.toString(response.getEntity()));
} finally {
response.close();
}
} finally {
httpclient.close();
}
}

}

有人可以解释为什么我们需要为 HttpClient 对象指定这样的代理以及 HttpClient 对象在这两种情况下的行为方式吗?

最佳答案

您需要 HTTP 代理才能连接到 INTERNET。它类似于网络浏览器代理设置,为了访问某些网络,您需要配置代理。

要模仿 HTTPClient api 调用或任何 Java URL 调用的相同效果,必须在调用对象中提供代理详细信息。以下是调用电话时发生的情况: 1. URL 提交是向代理而不是目标主机完成的。 2. 然后代理连接到预期的 URL。

这是正向代理场景(有时也有反向代理),所有网络请求都通过代理路由。这里的代理对于正在进行的网络调用是不可见的。

上面的两个示例在 httpclient 对象中设置代理,第一个示例使用构建器模式,第二个示例是逐步执行以在 httpclient 中设置代理。两者似乎表现相同。

在我看来,您仍然需要通过设置 JVM 代理选项来配置 Java 级别代理详细信息。

关于java - 当我为 HttpClient 对象设置代理时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41815513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com