同一ソケットから HTTP リクエストを繰り返し実行するクライアント Ver 1.0
HTTP で何か動作確認するときには、Cookie を追加したくなったりもするので、同一ソケットから HTTP リクエストを繰り返し実行するクライアント(修正版) - Shammerismにさらに手を加えて Cookie も送付できるように変更。また、Sleep する時間も調整できるようにした。
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; public class RepeatClient { public static void main(String[]args)throws Exception{ if( args.length != 5 ){ System.out.println("Usage: java RepeatClient $HOST $PORT $URI $REPEAT_COUNT $SLEEP_TIME\n"); System.exit(1); } Socket socket = null; BufferedReader stdinr = new BufferedReader(new InputStreamReader(System.in)); BufferedReader reader = null; BufferedWriter writer = null; try { System.out.print("Type Cookie Value:"); String cookie = stdinr.readLine(); socket = new Socket(args[0], Integer.parseInt(args[1])); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); int repeatCount = Integer.parseInt(args[3]); int sleepTime = Integer.parseInt(args[4]); boolean receivedConnectionClosedHeader = false; for( int i = 0 ; i < repeatCount && !receivedConnectionClosedHeader ; i++ ) { if( i != 0 ){ try { Thread.sleep(sleepTime * 1000); } catch(InterruptedException ignore){} } System.out.println("=============================="); System.out.println((i + 1) + " times try start!"); System.out.println("=============================="); int responseBodyContentLength = 0; writer.write("GET " + args[2] + " HTTP/1.1\r\n"); writer.write("Host: " + args[0] + "\r\n"); writer.write("Connection: Keep-Alive\r\n"); if( !"".equals(cookie) ){ writer.write("Cookie: " + cookie + "\r\n"); } writer.write("\r\n"); writer.flush(); while(true){ String line = reader.readLine(); if( line.equals("") ){ System.out.println(""); break; } else if( line.startsWith("Content-Length:") ){ String[] array = line.split(": "); responseBodyContentLength = Integer.parseInt(array[1]); } else if( line.equalsIgnoreCase("Connection: close") ){ // Received "Connection: close" HTTP Response header, // exit for loop whose count value is i. receivedConnectionClosedHeader = true; } else { System.out.println(line); } } // Read Response Body(supported only ascii) for( int j = 0 ; j < responseBodyContentLength ; j++ ){ System.out.print((char)reader.read()); } System.out.println("=============================="); System.out.println((i + 1) + " times try finish!"); System.out.println("=============================="); } } catch(Exception e){ e.printStackTrace(); } finally{ if( writer != null ){ try { writer.close(); } catch(Exception ignore){} } if( reader != null ){ try { reader.close(); } catch(Exception ignore){} } if( socket != null ){ try { socket.close(); } catch(Exception ignore){} } } } }