次のコードは、Web サイトから 5 秒ごとに応答を取得するために使用されますが、パケット アナライザー (wireshark など) によると、結果には常に何か問題があります。おそらく HTTP レスポンスは GZIP で圧縮されており、それを読み取る際に何か問題が発生している可能性があります。コードを実行するとFinishied
、Eclipse で複数取得できます (つまり、応答の読み取りが完了したことを意味しますGET / 1.1
) が、パケット アナライザーによると、いくつかしか送信できません。なんで?コードにコメントを付けると、非常に速くThread.sleep(1000*5);
表示されます (速すぎます。これはネットワーク速度からすれば異常です) が、それでも非常に遅いです。コードの問題は何ですか?Finished
GET / 1.1
public class pediy {
public static void main(String[] args) throws IOException {
URL url = new URL("http://bbs.pediy.com");
String request = "GET / HTTP/1.1\r\nHost: bbs.pediy.com\r\nProxy-Connection: keep-alive\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17 CoolNovo/2.0.6.12\r\nAccept-Encoding: gzip,deflate,sdch\r\nAccept-Language: en-US;q=0.6,en;q=0.4\r\nAccept-Charset: utf-8;q=0.7,*;q=0.3\r\n";
Socket socket = null;
PrintWriter os = null;
BufferedReader is = null;
InputStreamReader isr = null;
while(true) {
socket = new Socket(url.getHost(), 80);
os = new PrintWriter(socket.getOutputStream());
isr = new InputStreamReader(socket.getInputStream());
is=new BufferedReader(isr);
try {
while (true) {
os.println(request);
os.flush();
while(is.read() != -1);
System.out.println("Finished");
Thread.sleep(1000*5);
}
} catch (Exception e) {
System.out.println("Error" + e);
} finally {
CloseAll(socket, os, is, isr);
}
}
}
private static void CloseAll(Socket socket, PrintWriter os, BufferedReader is, InputStreamReader isr) throws IOException {
if(socket != null) socket.close();
if(os != null) os.close();
if(is != null) is.close();
if(isr != null) isr.close();
}
}