8

私は現在、bitbucketの問題であるRESTfulAPI用のライブラリを開発しています。私は順調に進歩しました。次に、 HTTPPUTリクエストを要求する問題の更新のセクションに取り組みます。

HTTPエラーコードが原因でスタックしています411 Length Required。少しグーグルした後、次のコード例を見つけました。

// CORRECT: get a UTF-8 encoded byte array from the response
// String and set the content-length to the length of the
// resulting byte array.
String response = [insert XML with UTF-8 characters here];
byte[] responseBytes;
try {
    responseBytes = response.getBytes("UTF-8");
}
catch ( UnsupportedEncodingException e ) {
    System.err.print("My computer hates UTF-8");
}

this.contentLength_ = responseBytes.length;

今私の質問:正確に測定されるものは何ですか?

  • クエリ文字列
  • urlencodedクエリ文字列
  • パラメータの値のみ...??

そしてconnection.setRequestProperty("Content-Length", String.valueOf(<mycomputedInt>));、コンテンツの長さ属性を設定する適切な方法はありますか?

例をいただければ幸いです。前もって感謝します。


編集:

たとえば、bitbucketwikiエントリの次のcurlの例を使用して計算を説明できます。

curl -X PUT -d "content=Updated%20Content" \
https://api.bitbucket.org/1.0/repositories/sarahmaddox/sarahmaddox/issues/1/
4

2 に答える 2

8

あなたはリクエストをやっていますよね。content-length は、リクエスト本文のバイト数です。あなたの場合

int content-length = "content=Updated%20Content".getBytes("UTF-8").length;

正確には何を測定するのですか?

URL エンコードされたクエリ文字列 (リクエスト/エンティティの本文にある場合)

于 2011-06-15T09:03:11.453 に答える
4

411の HTTP 仕様:

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

Content-Length ヘッダーの HTTP 仕様:

Content-Length エンティティ ヘッダー フィールドは、エンティティ ボディのサイズを OCTET の 10 進数で示します。

HTTPエンティティの長さに関する HTTP 仕様:

entity-body := Content-Encoding( Content-Type( data ) )

メッセージのエンティティ長は、転送コーディングが適用される前のメッセージ本文の長さです。


要約すると、圧縮されていない UTF-8 文字列を送信する場合は、送信するバイトを次のように決定します。

Identity( UTF-8( "content=Updated%20Content" ) )

Content-Length は出力バイト数に設定されます。

UTF-8 データを送信する場合は、Content-Typeヘッダーを設定することも強くお勧めします。

于 2011-06-15T09:04:23.527 に答える