2012-02-17 6 views
1

私は単純なtelnetアプリケーションをJavaで書いていますが、このアプリケーションはリクエスト(xml)を送信して応答を読み取ります。しかし、私は1200バイト以上のリクエストを(javaから)送信すると、HTTP 500を取得します。コマンドラインからこのコマンドを送信すると、HTTP 200(OK)が表示されます。 Javaに最大サイズ制限がありますか?JavaでTelnetから1200バイト以上のリクエストを送信できません{クローズ}

マイコード:任意の助け

public static void main(String[] args) throws IOException { 
     Socket pingSocket = null; 
     PrintWriter out = null; 
     BufferedReader in = null; 

     try { 
      pingSocket = new Socket("host", 4380); 
      out = new PrintWriter(pingSocket.getOutputStream(), true); 
      in = new BufferedReader(new InputStreamReader(pingSocket.getInputStream())); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return; 
     } 

     String newLine = "\n"; 
     String header = "POST /path HTTP/1.1" + newLine 
       + "Host: host:4380" + newLine 
       + "Authorization: Basic cuyasdyq123ha123" + newLine 
       + "Connection: close" + newLine 
       + "SOAPAction: \"\"" + newLine 
       + "Content-Type: text/xml; charset=utf-8" + newLine 
       + "Content-Length: 2000" + newLine; 

     String request = "my xml data here"; 

     System.out.println(header + request); 

     out.println(header); 
     out.println(request); 

     System.out.println(in.readLine()); 
     System.out.println(); 

     while (in.read() != -1) { 
      System.out.print((char) in.read()); 
     } 

     out.close(); 
     in.close(); 
     pingSocket.close(); 
    } 

おかげ

+0

コードを表示する必要があります。 – home

+0

@home私のコードを追加しました – totali

+0

HTTP 500が届いたら、あなたの*サーバ*ログをチェックして、何が起こっているのかを確認してください。 – Manish

答えて

1

これは、エンコーディングの問題のように見えます。コマンドラインからどのようなエンコーディングが得られるのか分かりません。ウィンドウを使用している場合は、cp-1252にすることもできます。だから、あなたの1200文字はおそらくあなたが指定した2000 Content-Length内に収まる1200バイトになるでしょう。

しかし、Javaでは、すべての文字が2バイトで表されます。したがって、1200文字は2400バイトになります。ヘッダーのContent-Length:2000はあなたのコンテンツを途中で切り詰めています。

+0

私は2400(その後3000、....)を書きますが、もう一度http 500を書きます。コマンドラインでは "Content-Type:text/xml; charset = utf-8 "と表示されます。私はコンテンツの長さの問題ではないと思う。 – totali

+0

Content-Length 3000の場合でも制限はまだ1200文字(またはその付近)であると言われていますか?したがって、制限はContent-Lengthの設定とは無関係ですか?本気ですか?入力の1200番目の文字がStAXパーサーが理解できないものである可能性はありますか?サーバーは、あなたが引用した1行以上の情報を提供していますか? –

+0

コンテンツの長さが無効な場合、なぜこのコマンドをコマンドラインから送信できますか?サーバーは何の情報も与えず、サーバーの応答はStAXリーダーまたはライターを作成できません。 – totali

関連する問題