2014-05-06 79 views
1

查詢我有一些與我正在做的實現有關。HTTP響應查詢

當HTTP請求從客戶端端口發送到服務器端口時,我知道 響應也被髮回到同一個端口(端口到端口通信)。

在我的情況下,服務器將響應轉發到帶有查詢字符串的URL到我們網絡上的主機服務器。所以當使用URLConnection對象的InputStream讀取響應時,得到的內容是與沒有查詢字符串的轉發URL的Login頁面相對應的HTML內容。

我懷疑這是因爲我們的主機服務器修改了URL。

現在的問題是,在這種情況下,似乎有一箇中間實體,它是我們的主機服務器的URL轉發。因此,當我在InputStream中讀取響應(由服務器轉發的URL)時,我不確定以下2中的哪一個是實際發生的情況:

1.)響應是直接從外部服務器讀取的因爲這是一個端口到端口的通信),從該看到是的情況下的中間主機服務器接收

OR

2.)響應。

(如果第二個方案是正確的,將中間宿主服務器知道哪個客戶端正確轉發到響應?)

URL url = new URL(httpsURL); 
HttpsURLConnection urlConnection = (HttpsURLConnection) url 
       .openConnection(); 
urlConnection.setRequestMethod("POST"); 
urlConnection.setDoOutput(true); 
urlConnection.setDoInput(true); 
/// 
Omitting code for SSL 
/// 
String urlParameters = "CCNumber=4111111111111111"; 
DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream()); 
wr.writeBytes(urlParameters); 
wr.flush(); 
wr.close(); 

BufferedReader in = new BufferedReader(new InputStreamReader(
       urlConnection.getInputStream())); 
String inputLine; 
if (urlConnection.getResponseCode() == HttpsURLConnection.HTTP_OK){ 

while ((inputLine = in.readLine()) != null) { 
    System.out.println(inputLine); 
} 
} 
+0

向我們顯示您的客戶代碼。 –

+0

附加了客戶端代碼..答案只不過是HTML頁面內容.. – Baz

回答

1

,您會收到來自中間服務器的響應。

這聽起來像您的中間服務器充當(reverseproxy server。當您向中間服務器發出請求時,它會向網絡上的服務器發送請求(就像您描述的那樣)。但是,「真實」的服務器通常不知道請求是由您發起的。特別是,它不知道您的IP地址或您發送請求的端口。它只知道知道的是中間(代理)服務器的IP地址和端口。另一方面,代理服務器仍然知道您發送請求的IP地址和端口。

因此,您將請求發送給代理,代理將其發送給「真實」服務器,真實服務器將其響應發送回代理,然後將代理髮回給您。你和「真實」的服務器不直接相互通信。

+0

答案很有幫助,但由於缺乏足夠的信譽,我無法投票。我有1個問題。獲取I/P流後,我調用getURL()方法來查找重定向的URL,以找出它們發送的查詢字符串。但是,似乎我得到的URL是我的中間服務器發送的URL,它會在主URL中添加會話標識信息。有什麼方法可以找出服務器發送的原始URL是什麼。我是否需要在中間服務器上設置一個過濾器來攔截傳入的url模式,以便我可以訪問由ext發送的查詢字符串。服務器。 – Baz

+1

調用'getUrl()'僅返回您創建'URLConnection'的URL(參見[JavaDoc](http://docs.oracle.com/javase/7/docs/api/java/net/URLConnection.html #的getURL%28%29))。 您無法找到代理服務器從「真實」服務器請求的URL。但這正是代理的要點。從客戶的角度來看,您所知道的所有代理服務器都是真正的服務器...... – PoByBolek