2010-04-27 11 views
18

verbringen einige Zeit studieren Pyracul und libcurl Dokumentation, ich kann immer noch nicht finden (ein einfacher) Weg, wie HTTP-Status-Nachricht (Grund-Satz) in Pycurl.Wie HTTP-Statusmeldung in (py) curl erhalten?

Statuscode ist einfach:

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" 

Antwort

23

Ich habe selbst eine Lösung gefunden, die tut, was ich brauche, könnte aber robuster sein (funktioniert für HTTP).

es basiert auf einer Tatsache, dass erfasste Header, die von pycurl.HEADERFUNCTION erhalten werden, die Statuszeile enthalten.

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" 
0

Versuchen BaseHTTPServer.BaseHTTPRequestHandler.responses, sollte es einen Fehlercode Dictionnary enthalten, wie in this page erläutert.

hoffe das hilft.

+0

, die ein mögliche ist Lösung .. ich sollte darauf hingewiesen haben, dass ich die Statusnachricht vom Server haben möchte, die anders sein kann, als die standardisierte – mykhal

2

Ich denke, dass Sie human_curl Bibliothek verwenden können, um Sie Code einfach zu erstellen.

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

Eine vollständige Dokumentation über human_curl Sie auf https://github.com/Lispython/human_curl

+0

"Grundphrase" ist ein Begriff, der von der HTTP-Protokoll-Dokumentation verwendet wird, um auf den Menschen zu verweisen lesbare Zeichenfolge, die nach dem status_code kommt. In diesem Beispiel wird nur der numerische Statuscode zurückgegeben. –

1

bekommen Dies ist ein alter Thread, aber ich habe hier auf der Suche nach ähnlichen Informationen. Wenn es nur der Statuscode ist Sie suchst, wie 200, 404, 500 usw. dann nur tun:

your_curl_handle.getinfo(pycurl.RESPONSE_CODE)

, die einen numerischen Statuscode zurückgeben sollte :)