2010-04-27 44 views
18

passant un peu de temps à étudier la documentation pycurl et libcurl, je n'arrive toujours pas à trouver un moyen (simple) d'obtenir le message d'état HTTP (phrase-reason) dans pycurl.Comment obtenir le message d'état HTTP dans (py) curl?

code d'état est facile:

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" 

Répondre

23

J'ai moi-même trouvé une solution, qui fait ce dont j'ai besoin, mais qui pourrait être plus robuste (fonctionne pour HTTP).

est basé sur le fait que les en-têtes capturés obtenus par pycurl.HEADERFUNCTION incluent la ligne d'état.

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

Essayez BaseHTTPServer.BaseHTTPRequestHandler.responses, il doit contenir un dictionnaire ErrorCode comme expliqué dans this page.

espérons que cela aide.

+0

qui est un possible solution .. je devrais avoir souligné, que je veux avoir le message d'état du serveur, qui peut être différent, que le normalisé – mykhal

2

Je pense que vous pouvez utiliser la bibliothèque human_curl pour créer du code simple.

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

Une documentation complète sur human_curl vous pouvez obtenir sur https://github.com/Lispython/human_curl

+0

"reason-phrase" est un terme utilisé par la documentation du protocole HTTP pour se référer à l'humain chaîne lisible qui vient après le status_code. Cet exemple renvoie simplement le code d'état numérique. –

1

Ceci est un vieux fil, mais je suis arrivé ici à la recherche d'informations similaires. S'il est juste le code d'état que vous cherchez, comme 200, 404, 500, etc., puis juste faire:

your_curl_handle.getinfo(pycurl.RESPONSE_CODE)

qui doit retourner un code d'état numérique :)