我正在使用java中的Http Proxy。基本上我有3個應用程序:Java代理:如何從HttpRequest中提取目標主機和端口?
- 客戶端應用程序,在這裏我只是提出一個請求到服務器通過代理
- 捕獲請求代理,修改它,然後將其轉發給Web服務器
Web服務器 這裏是我的客戶端代碼(來自Apache的HttpCore例子服用,但效果很好):
公共類ClientExecuteProxy(){
public static void main(String[] args)throws Exception { HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http"); DefaultHttpClient httpclient = new DefaultHttpClient(); try { httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); HttpHost target = new HttpHost("issues.apache.org", 443, "https"); HttpGet req = new HttpGet("/"); System.out.println("executing request to " + target + " via " + proxy); HttpResponse rsp = httpclient.execute(target, req); HttpEntity entity = rsp.getEntity(); System.out.println("----------------------------------------"); System.out.println(rsp.getStatusLine()); Header[] headers = rsp.getAllHeaders(); for (int i = 0; i<headers.length; i++) { System.out.println(headers[i]); } System.out.println("----------------------------------------"); if (entity != null) { System.out.println(EntityUtils.toString(entity)); } } finally { // When HttpClient instance is no longer needed, // shut down the connection manager to ensure // immediate deallocation of all system resources httpclient.getConnectionManager().shutdown(); } }
}
如果我做的請求到服務器的直接執行(如果我評論該行 「httpclient.getParams()的setParameter(ConnRoutePNames.DEFAULT_PROXY,代理);」),它的工作原理沒有任何問題。但如果我這樣離開它,它會通過代理。以下是我不知道如何處理代理的部分: 代理偵聽請求,讀取其內容並驗證它是否遵守某些策略。如果確定,它會將其轉發給服務器,否則它將丟棄請求,併發送一個帶有錯誤的HttpResponse。問題是什麼時候請求是好的,它需要被轉發。代理如何知道轉發它的地址?我的問題是:如何從「HttpHost target = new HttpHost(」issues.apache.org「,443,」https「);」? 我已經搜索了幾個小時,但什麼也沒找到。有人可以幫我嗎?
好的,假設我在代理上收到了HttpRequest。我如何提取目標地址和端口? – user2435860