我必須使用Java套接字發送和接收HTTP請求(我必須!)。所以我正在尋找一個解決方案,考慮到content-length
和Transfer-Encoding: chunked
等等,以決定HTTP請求何時結束。檢測HTTP請求(Java套接字)最簡單的方法?
這裏是什麼,我想出了到目前爲止的例子:
public String getWebpage()
{
try{
_out.print("GET/HTTP/1.1\r\nHost: www.google.com\r\n\r\n");
_out.flush();
String fullRequest = "";
String line = null;
while ((line = _in.readLine()) != null)
{
fullRequest += line + "\r\n";
if(isFullRequest(fullRequest))
{
System.out.println(fullRequest);
return fullRequest;
}
}
}catch(Exception e){}
return null;
}
private boolean isFullRequest(String request)
{
return request.contains("\r\n\r\n") //Make sure we have the headers
&& request.contains("</html>"); //Make sure we have the html
}
我isFullRequest()
方法是檢測請求結束一個非常廉價的方式,但並不可靠。我想知道是否已經有一個Class或Method已經包含在Java中,並且完全符合我的需求,而不是重新發明輪子並花費大量時間進行調試。沒有額外的不必要的jar依賴?
謝謝!這種方式現在解決了我的問題,但也許它不是很可靠,因爲它可能會導致長期的一些問題..(如果有任何諸如HTTP/1.0服務器不兼容或機器人檢測或保護等等) – Heidi 2014-10-09 05:33:38
如果你想看起來更像一個真正的瀏覽器,它更加複雜,因爲你不僅需要支持分塊的HTTP/1.1,而且還需要gzip和deflate內容編碼。即使這樣,由於缺少JavaScript,不會加載包括CSS,圖像,字體,不發送cookies等等資源,因此很容易區分您的請求和桌面瀏覽器。 – 2014-10-09 05:53:22