我想做一个客户端,可以发送HTTP请求,并从Web服务器接收响应。我尝试过使用Java的HttpURLConnection类,但它并不能完全控制实际发送到服务器的内容,所以我想编写自己的HTTP请求消息并通过Socket发送它们。然而,从Socket的InputStream中读取某些服务器的速度非常慢,如果可能的话,我想尽快加快速度。下面是一些代码,我用来测试有多慢读是套接字相比,HttpURLConnection类:试图加快读取从一个套接字在java
public static void useURLConnection() throws Exception
{
URL url = new URL("http://" + hostName + "/");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream in = conn.getInputStream();
byte[] buffer = new byte[buffersize];
long start = System.currentTimeMillis();
while(in.read(buffer) != -1) { }
System.out.println(System.currentTimeMillis() - start);
}
public static void useSocket() throws Exception
{
byte[] request = ("GET/HTTP/1.1\r\nHost: " + hostName + "\r\n\r\n").getBytes();
Socket socket = new Socket(hostName, 80);
OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream();
out.write(request);
byte[] buffer = new byte[buffersize];
long start = System.currentTimeMillis();
while(in.read(buffer) != -1) { }
System.out.println(System.currentTimeMillis() - start);
}
这两种方法有关的一些服务器相同的时间内运行,如www.wikipedia.org ,但从插槽读取速度要慢得多 - 几分钟而不是毫秒 - 对于其他人,比如www.google.com。有人可以解释为什么这是,也许给我一些指示,以便我能做些什么来加速从套接字读取?谢谢。
你为什么不使用现有的馆藏?他们已经有了很好的代码,比如[HTTPClient](http://hc.apache.org/httpcomponents-client-ga/)或者JF Arcand的AsyncHTTPClient(你可以在github上找到它) – Grooveek
'HttpURLConnection'为你提供完整的控制发送到服务器的内容。您可以指定所需的方法和标题,并且可以覆盖库选择的默认标题值。而且,正如您已经看到的那样,您不需要具备底层协议的详细知识即可使其正常工作。 – erickson
@Grooveek我不知道HTTPClient。我会研究它。 – Kevin