Как получить сообщение о статусе HTTP в (py) curl?

Потратив некоторое время на изучение документации pycurl и libcurl, я до сих пор не могу найти (простой) способ, как получить сообщение о статусе HTTP (фразу-причину) в pycurl.

код состояния прост:

import pycurl
import cStringIO

curl = pycurl.Curl()
buff = cStringIO.StringIO()
curl.setopt(pycurl.URL, 'http://example.org')
curl.setopt(pycurl.WRITEFUNCTION, buff.write)
curl.perform()

print "status code: %s" % curl.getinfo(pycurl.HTTP_CODE)
# -> 200

# print "status message: %s" % ???
# -> "OK"

person mykhal    schedule 27.04.2010    source источник


Ответы (4)


Я сам нашел решение, которое делает то, что мне нужно, но может быть более надежным (работает для HTTP).

это основано на том факте, что захваченные заголовки, полученные pycurl.HEADERFUNCTION, включают строку состояния.

import pycurl
import cStringIO
import re

curl = pycurl.Curl()

buff = cStringIO.StringIO()
hdr = cStringIO.StringIO()

curl.setopt(pycurl.URL, 'http://example.org')
curl.setopt(pycurl.WRITEFUNCTION, buff.write)
curl.setopt(pycurl.HEADERFUNCTION, hdr.write)
curl.perform()

print "status code: %s" % curl.getinfo(pycurl.HTTP_CODE)
# -> 200

status_line = hdr.getvalue().splitlines()[0]
m = re.match(r'HTTP\/\S*\s*\d+\s*(.*?)\s*$', status_line)
if m:
    status_message = m.groups(1)
else:
    status_message = ''

print "status message: %s" % status_message
# -> "OK"
person mykhal    schedule 29.04.2010

Это старая тема, но я нашел здесь аналогичную информацию. Если вам нужен только код состояния, например 200, 404, 500 и т. д., просто выполните:

your_curl_handle.getinfo(pycurl.RESPONSE_CODE)

который должен возвращать числовой код состояния :)

person Kalabaaz    schedule 20.08.2016
comment
Это правильный способ проверки кода состояния - person ddnomad; 23.01.2020
comment
Я получаю pycurl.error: cannot invoke getinfo() - no curl handle ошибку. - person chanduthedev; 24.11.2020

Я думаю, что вы можете использовать библиотеку human_curl для создания простого кода.

>>> import human_curl as hurl
>>> r = hurl.get('http://example.org')
>>> print r.status_code
200

Полную документацию по human_curl вы можете найти на https://github.com/Lispython/human_curl.

person Alexandr    schedule 14.04.2012
comment
Фраза-причины — это термин, используемый в документации по протоколу HTTP для обозначения удобочитаемой строки, которая следует после кода состояния. Этот пример просто возвращает числовой код состояния. - person Mark Lakata; 17.03.2017