使用curl模拟HTTP请求

时间:2013-11-22 19:57:45

标签: http curl unicode httpie

我试图调试在我们的服务器上产生错误的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 个答案:

答案 0 :(得分:2)

我认为\ xE2 \ x9C \ x93是由您的服务器重新编码的实际UTF8字符,以便能够将它们放入日志中。也许看看字符在UTF8中实际是什么,并将字符放在URL中。

希望有所帮助

答案 1 :(得分: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终端上,   输入“。”而不是。

答案 2 :(得分:0)

而不是\xYZ使用%YZ,它将是相同的。例如,在CURL请求中将\xE2替换为%E2

答案 3 :(得分:0)

您是否尝试过:curl -s -o / dev / null“http://yoursite.com/en/library/search?utf8= \ xE2 \ x9C \ x93& q =某事”?