我正试图调试一个在服务器上产生错误的HTTP请求。然而,我正在努力以某种方式复制确切的请求。
在我的nginx日志中,我看到这个条目生成了错误
157.55.33.20 - - [22/Nov/2013:04:06:22 +0000] "GET /en/library/search?utf8=xE2x9Cx93&q=something HTTP/1.1" 500 0 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "-"
但是,尝试使用相同的字符串使用curl
或httpie
会生成日志条目,如:
GET /en/library/search?utf8=x5CxE2x5Cx9Cx5Cx93&q=something
或
GET /en/library/search?utf8=xE2x9Cx93&q=something
或
GET /en/library/search?utf8=%5CxE2%5Cx9C%5Cx93&q=something
我似乎无法复制完全相同的请求。我尝试了使用各种命令行参数,但找不出这个参数。
关于如何复制完全相同的请求,有什么建议吗?
在我看来,\xE2\x9C\x93是由服务器重新编码的实际UTF8字符,以便能够将它们放入日志中。也许看看UTF8中的字符实际是什么,然后把字符放在URL中。
希望它能帮助
使用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=xE2x9Cx93&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终端上,键入"œ"。
使用%YZ
而不是xYZ
,它将是相同的。例如,在CURL请求中将xE2
替换为%E2
。
是否尝试过:curl-s-o/dev/null"http://yoursite.com/en/library/search?utf8=\xE2\x9C\x93&q=something"?