1

次のようなコードを書いています:

PostMethod p = new PostMethod(someurl);
...
NameValuePair[] data = {
    new NameValuePair("name1", "somevalue1"),
    new NameValuePair("var[3][1]", "10")
};
try {
    hc.executeMethod(p);
}
...

そして、Wireshark での投稿を見ると、次のようになります。

POST /someurl HTTP/1.1
...
type=var&ship%5B3%5D%5B1%5D=10

%5B手段[%5D-]

問題は、投稿で角括弧を取得する方法です。

4

2 に答える 2

1

これはエンコーディングと呼ばれ、データが転送される方法です。ただし、データを受信するサービスは、最後にこれをデコードします。したがって、これについて心配する必要はありません。

角括弧は安全でないと見なされるため、エンコードせずにそのまま送信することはできません。以下は、 URL RFCのテキストです。

安全でない:

キャラクターは、さまざまな理由で安全ではない可能性があります。 URL が書き起こされたり、 タイプセットされたり、ワープロ プログラムの処理を受けると、重要
なスペースが消えたり、重要でないスペースが導入されたりする可能性があるため、スペース文字は安全ではありません。文字 "<" と ">" は 、フリー テキストの URL の区切り文字として使用されるため、安全ではありません。引用符 (""") は 、一部のシステムで URL を区切るために使用されます。文字 "#" は安全ではなく、 常にエンコードする必要があります。これは、World Wide Web や他の システムで URL をフラグメント/アンカーから区切るために使用されるためです。文字 "%" は、次の目的で使用されるため、安全ではありません。






他の文字のエンコーディング。
ゲートウェイやその他のトランスポート エージェントがそのような文字を変更することがあることが知られているため、その他の文字は安全ではありません。これらの文字は、"{"、"}"、"|"、"\"、"^"、"~"、"["、"]"、および "`" です。

すべての安全でない文字は、常に URL 内でエンコードする必要があります。たとえば
、文字「#」は、通常はフラグメント識別子またはアンカー識別子を処理しないシステムでも URL 内でエンコードする必要があります。そのため、URL がそれらを使用する別のシステムにコピーされた場合、その URL を変更する必要はありません。 URL エンコーディング。

于 2010-12-24T21:47:27.270 に答える
1

それはまさにPOST体がどのように見えるべきかです。これらの角括弧は URL エンコードする必要があります。クライアントが本文のクエリ文字列を解析するとき、POSTそれらのキーと値を URL デコードすることになっています。Web ブラウザーで単純な HTML POST フォームを試して、wireshark で確認してください。まったく同じものが表示されます。ここでは問題ありません。

于 2010-12-24T21:46:49.533 に答える