'How to get HTTP status message in (py)curl?
spending some time studying pycurl and libcurl documentation, i still can't find a (simple) way, how to get HTTP status message (reason-phrase) in pycurl.
status code is easy:
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"
Solution 1:[1]
i've found a solution myself, which does what i need, but could be more robust (works for HTTP).
it's based on a fact that captured headers obtained by pycurl.HEADERFUNCTION include the status line.
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"
Solution 2:[2]
This is an old thread but I got here looking for similar information. If it is just the status code you're looking for, such as 200, 404, 500 etc. then just do:
your_curl_handle.getinfo(pycurl.RESPONSE_CODE)
which should return a numerical status code :)
Solution 3:[3]
I think that you can use human_curl library to create you code simple.
>>> import human_curl as hurl
>>> r = hurl.get('http://example.org')
>>> print r.status_code
200
Full documentation on human_curl you can get on https://github.com/Lispython/human_curl
Solution 4:[4]
If you only want the code, you can do, and assuming your pycurl.Curl() instance is called curl (ie. curl = pycurl.Curl()), you can do
curl.getinfo(pycurl.RESPONSE_CODE)
curl.getinfo(pycurl.HTTP_CODE)
But the nice way in my opinion is to parse the header yourself instead of letting libraries spoon-feed you everything.
Solution 5:[5]
Try BaseHTTPServer.BaseHTTPRequestHandler.responses, it should contain an errorcode dictionnary as explained in this page.
hope this helps.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | mykhal |
| Solution 2 | Kalabaaz |
| Solution 3 | Alexandr |
| Solution 4 | étale-cohomology |
| Solution 5 | Aif |
