2010-04-27 12 views
18

trascorso un po 'di tempo a studiare la documentazione di pycurl e libcurl, non riesco ancora a trovare un (semplice) modo, come ottenere un messaggio di stato HTTP (frase-frase) in pycurl.Come ottenere il messaggio di stato HTTP in (py) curl?

codice di stato è 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" 

risposta

23

ho trovato una soluzione da solo, che fa ciò di cui ho bisogno, ma potrebbe essere più robusto (funziona per HTTP).

si basa sul fatto che le intestazioni acquisite ottenute tramite pycurl.HEADERFUNCTION includono la riga di stato.

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

Prova BaseHTTPServer.BaseHTTPRequestHandler.responses, dovrebbe contenere un Dictionnary errorcode come spiegato nel this page.

spero che questo aiuti.

+0

che è un possibile soluzione .. avrei dovuto precisare, che voglio avere il messaggio di stato dal server, che può essere diverso, rispetto a quello standardizzato – mykhal

2

Penso che sia possibile utilizzare la libreria human_curl per creare codice semplice.

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

documentazione completa sulla human_curl si può ottenere su https://github.com/Lispython/human_curl

+0

"frase-frase" è un termine usato dalla documentazione del protocollo HTTP per riferirsi all'umano stringa leggibile che viene dopo lo status_code. Questo esempio restituisce semplicemente il codice di stato numerico. –

1

Questo è un vecchio thread, ma mi sono qui in cerca di informazioni simili. Se è solo il codice di stato che stai cercando, come ad esempio 200, 404, 500 ecc poi basta fare:

your_curl_handle.getinfo(pycurl.RESPONSE_CODE)

che dovrebbe restituire un codice di stato numerico :)

Problemi correlati