2013-11-22 329 views
0

我想調試一個HTTP請求,在我們的服務器上產生一個錯誤。但是,我努力以某種方式重現確切的請求。模擬一個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

我似乎無法重現完全相同的請求。我嘗試了各種命令行參數,但無法弄清楚這一點。

關於如何重現完全相同的請求的任何建議?

回答

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 

完成與兩個回車標記的結束頭。

編輯: lcornea的建議也值得考慮。如果您的命令行終端 接受UTF8(輸入echo $LANG查找),則鍵入(或粘貼)字符✓ (複選標記)而不是三個轉義字符。或者在Windows Latin-1終端上, 改爲輸入「œ」。

+0

由於網站使用的是SSL,我使用'openssl s_client',在我的nginx日誌答案中:'GET/en/library/search?utf8 = \ x5CxE2 \ x5Cx9C \ x5Cx93&q = something' – gingerlime

+0

第二個建議雖然做到了! 'curl'https://my.website.com/en/library/search?utf8 =✓&q = something''再現了這個問題。謝謝!! – gingerlime

0

而不是\xYZ使用%YZ它會是一樣的。例如在CURL請求中將\xE2替換爲%E2

+0

謝謝。我試了一下,但日誌顯示'GET/en/library/search?utf8 =%E2%9C%93' – gingerlime

2

它在我看來是\ xE2 \ x9C \ x93是由您的服務器重新編碼以便能夠將它們放入日誌中的實際UTF8字符。也許看看這些字符實際上是在UTF8中,然後將這些字符放在URL中。

希望它可以幫助

+0

是的,這就是我想要弄明白的。如何模擬相同的請求,因此我的問題。 – gingerlime

+0

感謝您的建議。它幫助@squeamish ossifrage給出了完整的答案。 – gingerlime

+0

@Yoav Aner我很高興我的回答幫助你給出了全面的迴應。你的迴應是非常好的工作。 – lcornea