2013-11-22 9 views
0

Я пытаюсь отладить HTTP-запрос, который вызывает ошибку на нашем сервере. Тем не менее, я изо всех сил пытаюсь воспроизвести точный запрос.имитировать HTTP-запрос с curl

На моих журналах 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)" "-"

Однако, пытаясь использовать curl или httpie, используя ту же строку производит запись журнала, как:

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

Вы можете создавать HTTP-запросы с большей свободой с помощью telnet. Чтобы начать соединение, введите это в командной строке:

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 

Финиш с двумя каретки возвращается, чтобы отметить конец заголовок.

EDIT: предложение 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

Второе предложение сделало это, хотя! 'rotl 'https: //my.website.com/en/library/search? utf8 = ✓ & q = something'' воспроизвел проблему. Благодаря!! – gingerlime

0

\xYZ использование %YZ и будет таким же. Например, замените \xE2 на %E2 в запросе CURL.

+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

Смежные вопросы