[英]How to get proxy response in java http request?
我通过代理服务器发送http请求。
当我使用curl
我得到了两个部分的响应:从代理和从目标服务器:
curl -i --proxy proxy.com:8080 --proxy-user user:1234 https://target.com
HTTP/1.1 200 Connection established
X-Proxy-Header: Header-Value: connected established
HTTP/1.1 200 OK
Server: target.com
other headers
http response
如何在Java中获得相同的输出? 我使用apache HttpClient,它仅返回目标服务器的响应。 缺少代理响应。
我需要基本思想而不是具体实现,因为我也必须将其重用于Netty库。 无论如何,示例代码从以下开始:
HttpHost myProxy = new HttpHost("proxy.com", 8080);
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope(myProxy), new UsernamePasswordCredentials("user", "1234"));
HttpClient client = HttpClients.custom()
.setConnectionManager(new BasicHttpClientConnectionManager())
.setProxy(myProxy)
.setDefaultCredentialsProvider(credentialsProvider)
.build();
HttpGet request = new HttpGet(url);
HttpResponse = client.execute(response);
如何在Java中获得相同的输出?
一种方法是使用HTTPClientConnection
对象自己进行代理。
另一种方法是实现您自己的HttpClientConnectionManager
API版本,该版本可捕获并保存代理响应。
但是,这并非易事……而且我并不十分明白这一点。 如果您只是想查看出于调试目的而发送和接收的内容,那么一种更简单的方法是使用Apache HttpClient日志记录,如下所示:
您甚至可以让Apache进行“在线”操作。
我需要基本思想,而不是具体实现
好吧,这个想法是基于Java库在幕后执行所有低级内容的事实。 如果使用代理连接,则HTTPS请求的典型工作流程可以是:
200 Connection established
,然后通过SSL在客户端和目标之间传输所有流量 工作流的第二部分由Java库以及所有其他内容处理。
对于netty库,自4.1开始使用ProxyHandler处理代理。 可以使用handleResponse
方法中的自定义代理处理程序或通过向管道添加其他入站处理程序来处理代理响应。
我没有为Apache HttpClient搜索解决方案,但是如果将日志记录设置为调试级别,则至少可以看到所有流量。 可以通过以下方法实现:
System.setProperty("org.apache.commons.logging.Log","org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.wire", "DEBUG");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.