2013-03-25 14 views
8

HTTPクライアントを実装するJavaプログラムを作成しています。 リクエストをサーバーに送信してテストします。 GET、POST、DELETEリクエストは正常に動作します。 は、POSTリクエストの後にたとえば、私は、出力HTTPクライアントからのPUTリクエスト後に "411 Length Required"を取得する

Data extracted: 
{"status":{"message":"ok"}} 

を取得し、データベースが作られた変更が反映されます。

PUTリクエスト後、エラーを示すWebページの次のHTMLマークアップが表示されます。

Data extracted: 
<html> 
<head><title>411 Length Required</title></head> 
<body bgcolor="white"> 
<center><h1>411 Length Required</h1></center> 
<hr><center>nginx/1.2.6</center> 
</body> 
</html> 

したがって、データベースに変更はありません。

これはContent-Lengthヘッダーと関連があることがわかりましたが、わかりません。 このヘッダーを追加しようとすると、プログラムは1分待ってからサーバーの応答を処理できないという例外をスローします。

必要に応じて、コードやスタックトレースを提供することもできます。

+0

だから 'setHeader(" Content-Length "、" "+ file.length())' resp。 'setContentLength((int)file.length());'そうです。 –

+0

ファイルをアップロードしたくありません。データベースを更新するためにパラメタの束をURLに渡そうとしています –

+0

@Sachinのようにコンテンツの長さは0です。 –

答えて

16

はい、問題はに関連しています。 HTTPエラー411の意味

サーバーは定義されたContent-Lengthなしで要求を受け入れることを拒否します。要求メッセージ中のメッセージ本文の長さを含む有効なContent-Lengthヘッダフィールドを追加した場合、クライアントは要求を繰り返すことができる(MAY)。

したがって、RequestBodyをPOST/PUTメソッドで送信するときは、Content-Length:0も送信する必要があります。したがって、あなたの要求にこのヘッダーを追加してください。私はこのヘッダーがあなたがRequest Objectに追加した問題を引き起こすとは思わない。

+1

これも試してみましたが、このケースではデータ抽出: {"ステータス":{"メッセージ": "コンテンツタイプ 'application/octet-stream'はサポートされていません}}} –

+0

これはContent-typeに関連する別の問題です。サーバが適切なMIMEタイプを報告していないか、このコンテンツタイプがサポートされていない可能性があります。 – Sachin

+0

私はサーバに接続し、彼らが同じPUTリクエストをテストしたことを彼らに伝え、HTTPクライアントの実装で動作します。私は専用のJava MEプラットフォームを使用しています。私のバージョンのHTTP Clientにはバグがあると想定しています。私が理解できないのは、それがPOSTでどのように機能するのかです。 –

関連する問題