2014-02-05 5 views
1

Я использую модуль 'request' в Python для запроса конечной точки API RESTful. Иногда конечная точка возвращает HTTP-ошибку 500. Я понимаю, что могу получить код состояния с помощью request.status_code, но когда я получу ошибку 500, мне бы хотелось увидеть текст ответа «HTTP» (я не уверен, что он называется , примеры ниже). До сих пор мне удалось получить некоторые заголовки с помощью response.headers. Тем не менее, информация, которую я ищу, по-прежнему не существует.Получить HTTP-ответ заголовка, используя модуль запросов Python

Использование «локон -vvv», я могу видеть ответ HTTP, что я после того, как (какой-то выход опущена для ясности):

< HTTP/1.1 200 OK <---------------------this is what I'm after) 
* Server nginx/1.4.1 is not blacklisted 
< Server: nginx/1.4.1 
< Date: Wed, 05 Feb 2014 16:13:25 GMT 
< Content-Type: application/octet-stream 
< Connection: close 
< Set-Cookie: webapp.session.id="mYzk5NTc0MDZkYjcxZjU4NmM=|1391616805|f83c47a363194c1ae18e"; expires=Fri, 07 Mar 2014 16:13:25 GMT; Path=/ 
< Content-Disposition: attachment; filename = "download_2014161325.pdf" 
< Cache-Control: public 

Опять же, это от завитка. Теперь, когда я использую модуль запроса Python и попросить заголовков, все это я получаю:

CaseInsensitiveDict(
{ 
    'date': 'Tue, 04 Feb 2014 21:56:45 GMT', 
    'set-cookie': 'webapp.session.id="xODgzNThlODkzZ2U0ZTg=|1391551005|a11ca2ad11195351f636fef"; expires=Thu, 06 Mar 2014 21:56:45 GMT; Path=/, 
    'connection': 'close', 
    'content-type': 'application/json', 
    'server': 'nginx/1.4.1' 
} 
) 

Обратите внимание на скручивание ответ включает «HTTP/1.1 200 OK», но requests.headers нет. Почти все остальное в заголовках ответов есть. Request.status_code дает мне 200. В этом примере все, что мне нужно, это «ОК». В других сценариях наш сервер nginx возвращает более подробные сообщения, такие как «HTTP/1.1 500 search unavailable» или «HTTP/1.1500 bad parameters» и т. Д. Я хотел бы получить этот текст. Есть ли способ или я могу что-то взломать с помощью Попена и локон? Requests.content и request.text не помогают.

ответ

3

Вы ищете Response.reason attribute:

>>> import requests 
>>> r = requests.get('http://httpbin.org/get') 
>>> r.status_code 
200 
>>> r.reason 
'OK' 
>>> r = requests.get('http://httpbin.org/status/500') 
>>> r.reason 
'INTERNAL SERVER ERROR' 
+0

Это именно то, что мне было нужно. Спасибо. В каком наборе документов я могу найти это? Я искал через docs.python-requests.org и не могу его найти. – harperville

+2

Документация для этого отсутствовала; Я добавил [pull request] (https://github.com/kennethreitz/requests/pull/1904), чтобы исправить это. –

+2

Документация обновлена. –

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