0

サーバーでエラーを生成する HTTP 要求をデバッグしようとしています。ただし、どういうわけか正確な要求を再現するのに苦労しています。

nginx ログに、エラーを生成したこのエントリが表示されます

157.55.33.20 - - [22/Nov/2013:04:06:22 +0000] "GET /en/library/search?utf8=\xE2\x9C\x93&q=something HTTP/1.1" 500 0 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "-"

ただし、同じ文字列を使用しようとすると、curlhttpieのようなログ エントリが生成されます。

GET /en/library/search?utf8=\x5CxE2\x5Cx9C\x5Cx93&q=something

また

GET /en/library/search?utf8=xE2x9Cx93&q=something

また

GET /en/library/search?utf8=%5CxE2%5Cx9C%5Cx93&q=something

まったく同じリクエストを再現できないようです。さまざまなコマンドライン パラメータを試しましたが、これがわかりません。

まったく同じリクエストを再現する方法について何か提案はありますか?

4

4 に答える 4

2

\xE2\x9C\x93 は、ログに記録できるようにサーバーによって再エンコードされた実際の UTF8 文字であるように見えます。文字が実際に UTF8 で表示されているものを見て、その文字を URL に入力してください。

それが役に立てば幸い

于 2013-11-22T20:02:14.093 に答える
1

telnet を使用すると、より自由度の高い HTTP リクエストを作成できます。接続を開始するには、コマンド ラインで次のように入力します。

telnet www.example.com 80

(ここで、80 は HTTP 要求のポート番号に対応します)。接続すると、次のようなメッセージが表示されます。

Trying 12.34.56.78...
Connected to www.example.com.
Escape character is '^]'.

次に、リクエストを入力できます。たとえば、次のようになります。

GET /en/library/search?utf8=\xE2\x9C\x93&q=something HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

ヘッダーの終わりを示す 2 つのキャリッジ リターンで終了します。

編集: lcornea の提案も検討する価値があります。コマンド ライン ターミナルが UTF8 を受け入れる場合 (echo $LANG検索するには入力)、エスケープされた 3 文字の代わりに ✓ (チェック マーク) を入力 (または貼り付け) します。または、Windows Latin-1 端末では、代わりに「」と入力します。

于 2013-11-22T20:08:10.723 に答える
0

代わりに\xYZ使用する%YZと同じになります。たとえば、CURL リクエストの\xE2toを置き換えます。%E2

于 2013-11-22T20:00:20.270 に答える
0

試しましたか: curl -s -o /dev/null " http://yoursite.com/en/library/search?utf8= \xE2\x9C\x93&q=something" ?

于 2013-11-22T20:07:09.233 に答える