2014-01-08 63 views
0

我正在使用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「);」? 我已經搜索了幾個小時,但什麼也沒找到。有人可以幫我嗎?

回答

0

當定義一個HTTP代理嚮應用程序或瀏覽器,或者:

  1. 會有以形成隧道的先前CONNECT請求,告訴你目標主機:端口,或

  2. 整個目標URL位於GET/POST/...請求行的中間。通常,沒有代理服務器,這只是一個相對URL,相對於TCP連接的主機端口。

+0

好的,假設我在代理上收到了HttpRequest。我如何提取目標地址和端口? – user2435860

相關問題