2016-06-20 12 views
3

の終わりを検出し、それを行うために必要なすべての要求を取得し、適切に応答する取り扱いです。HTTP GETリクエストヘッダ(javaの)私はJavaで非常に基本的なHTTPサーバーを作成しようとしてい

私はこのような何かやろうとしている:私が理解から、新しい要求

のために後藤1バッファ文字列

  • ハンドル要求
    1. 読み出し要求を、すべてのHTTP GET要求ヘッダーは "\ r \ n \ r \ n"で終わるので、文字列を検索して見つけたら、完全な要求ヘッダーが送信されたことを示すはずです。私はこれを行うには、以下のコードを使用しています残念ながら私は上記の組み合わせを見つけるようではありません。私はこの組み合わせが見つかるはずであると誤解していますか?

       int bytesRead = 0; 
           String request = ""; 
           DataInputStream in = new DataInputStream(clientSocket.getInputStream()); 
           DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream()); 
           while ((bytesRead = in.read(buffer)) != -1){ 
            request += new String(buffer).trim(); 
            buffer = new byte[BUFSIZE]; 
            if (request.contains("\r\n\r\n")) { 
             handleRequest(request); 
             request = ""; 
            } 
           } 
      

      私はdetecting end of http header with \r\n\r\nを見つけたし、そこでの回答によると、私はこの方法をヘッダの終了を検出することができるはず、まだ私は私のブラウザから作られた要求を検索したとき、それがこれを見つけられません「\ r \ n \ r \ n」の組み合わせ。以下は、クローム製の要求がある:これはクラスのためであるので、我々は、Javaに付属しているHTTPライブラリで構築を使用することはできません。

      GET/HTTP/1.1 
      Host: localhost:8888 
      Connection: keep-alive 
      Cache-Control: max-age=0 
      Upgrade-Insecure-Requests: 1 
      User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML,    like Gecko) Chrome/51.0.2704.84 Safari/537.36 
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
      Accept-Encoding: gzip, deflate, sdch 
      Accept-Language: sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4 
      X-CookiesOK: I explicitly accept all cookies 
      

      は、すべてのヘルプは

      編集を感謝しています。

  • 答えて

    2

    BufferedReader.readLine()を使用してください。あなたが空の行を取得すると、あなたは完了です。

    +0

    あなたの助け、いただき、誠にありがとうございます –

    4

    私が個人的に、私は、ヘッダの終了を示す空行に達するまでライン毎に読み取ることBufferedReaderを使用し、それははるかに少ない誤差が生じやすいです。

    BufferedReader in = new BufferedReader(
        new InputStreamReader(clientSocket.getInputStream(), encoding) 
    ); 
    String line; 
    StringBuilder request = new StringBuilder(); 
    while ((line = in.readLine()) != null){ 
        request.append(line).append("\r\n"); 
        if (line.isEmpty()) { 
         handleRequest(request.toString()); 
         break; 
        } 
    } 
    
    +0

    うまく動作ありがとう –

    関連する問題