[英]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.