當我通過一個套接字發送一個正常的HTTP請求時,服務器不響應一個OK響應。我複製了FireFox的HTTP標頭。下面是代碼:通過套接字手動發送HTTP請求
Socket s = new Socket(InetAddress.getByName("stackoverflow.com"), 80);
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.print("GET/HTTP/1.1");
pw.print("Host: stackoverflow.com");
pw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String t;
while((t = br.readLine()) != null) System.out.println(t);
br.close();
然而,這裏是我收到的迴應:
HTTP/1.0 408 Request Time-out
Cache-Control: no-cache
Connection: close
Content-Type: text/html
<html><body><h1>408 Request Time-out</h1>
Your browser didn't send a complete request in time.
</body></html>
我知道,我可以用URL.openStream()
做到這一點,但爲什麼服務器不識別的HTTP請求當我手動發送它?
我想你把所有的報頭之後發送一個額外的換行; 'pw.println();',並且使用'println()'作爲頭文件? – Torious
@Torious是的,這就是問題所在。謝謝:) –
對於HTTP,換行符必須是\ r \ n的格式。 – EJP