我構建代理服務器,它工作得很好,但有一些網站他不能處理。 我試圖將問題減少到其核心,這就是我想到的: 我的測試用例是:http://bits.wikimedia.org/en.wikipedia.org/load.php 這是每個維基百科頁面中傳輸的http消息之一。 所以我試圖建立一個請求,並通過一個套接字發送這樣的:HTTP 1.1請求行
String request1 =
"GET http://bits.wikimedia.org/en.wikipedia.org/load.php HTTP/1.1" +
"\r\n" +
"Host: bits.wikimedia.org" + "\r\n" +
"User-Agent: MyHttpProxy/example.java (http://stackoverflow.com/q/5924490/319266)" +
"\r\n" + "\r\n";
但是我得到了404返回碼 - 因爲這個頁面確實存在這很奇怪! 我做的改掉了很多,並提出了新的要求這是隻有在請求行不同:
String request2 =
"GET /en.wikipedia.org/load.php HTTP/1.1" +
"\r\n" +
"Host: bits.wikimedia.org" +
"\r\n" +
"User-Agent: MyHttpProxy/example.java (http://stackoverflow.com/q/5924490/319266)" +
"\r\n" + "\r\n";
和它的工作!一個好的200帶回 一些不重要的內容(「/ *沒有模塊請求。最大讓我把這個在這裏* /」)
任何人都可以告訴我這裏有什麼問題嗎? 我看着RFC和我不能作出任何理由的這個...
Here是運行這個測試的源代碼,並打印resuls:
從技術上講,服務器應該接受絕對的語法,但許多服務器不會。 – EricLaw 2011-05-08 18:12:26
嗨!首先感謝迴應。我怎麼知道我的請求是否通過服務器?假設我想製作一個「透明」的代理服務器,我如何知道我的請求是否會轉到代理服務器或直接轉到原始服務器?例如: 「http://www.youtube.com/watch?v=IytNBm8WA1c」以及上述內容。順便說一句:我沒有在stackoverflow 15點,因此我仍然不能標記答案爲useull(但它!) – talel 2011-05-09 04:42:03
嗨。 如果您正在編寫透明代理服務器,那麼您無法在客戶端級別進行區分 - 這就是透明度的全部要點。在這種情況下,我的答覆大部分都不適用。 如果您自己編寫代理,那麼您應該在日誌中看到它是否看到請求。或者,您可以執行流量捕獲並查看對等IP是代理服務器還是源服務器。 – RomanK 2011-05-09 06:24:15