Как получить сообщение статуса 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"
Ответы
Ответ 1
Я нашел решение самостоятельно, что делает то, что мне нужно, но может быть более надежным (работает для 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"
Ответ 2
Я думаю, что вы можете использовать библиотеку human_curl для простого создания кода.
>>> import human_curl as hurl
>>> r = hurl.get('http://example.org')
>>> print r.status_code
200
Полную документацию по man_curl вы можете получить https://github.com/Lispython/human_curl
Ответ 3
Это старая нить, но я нашел здесь подобную информацию. Если это всего лишь код состояния, который вы ищете, например, 200, 404, 500 и т.д., Просто выполните:
your_curl_handle.getinfo(pycurl.RESPONSE_CODE)
который должен возвращать числовой код состояния:)
Ответ 4
Попробуйте BaseHTTPServer.BaseHTTPRequestHandler.responses, он должен содержать словар errorcode, как описано в этой странице.
надеюсь, что это поможет.