我必须使用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