2010-04-27 12 views
18

pasando algún tiempo estudiando la documentación de pycurl y libcurl, todavía no puedo encontrar una forma (simple), cómo obtener el mensaje de estado HTTP (razón-frase) en pycurl.Cómo obtener el mensaje de estado HTTP en (py) curl?

código de estado es fácil:

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" 

Respuesta

23

he encontrado una solución yo mismo, que hace lo que necesito, pero podría ser más robusto (funciona para HTTP).

se basa en un hecho de que los encabezados capturados obtenidos por pycurl.HEADERFUNCTION incluyen la línea de estado.

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

Trate BaseHTTPServer.BaseHTTPRequestHandler.responses, debe contener un código de error dictionnary como se explica en this page.

Espero que esto ayude.

+0

que es una posible solución ... debería haber señalado, que quiero tener el mensaje de estado del servidor, que puede ser diferente, que el estándar – mykhal

2

Creo que puede utilizar la biblioteca human_curl para crear un código simple.

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

la documentación completa sobre human_curl se puede obtener en https://github.com/Lispython/human_curl

+0

"razón-frase" es un término utilizado por la documentación del protocolo HTTP para referirse al humano cadena legible que viene después del código de estado. Este ejemplo solo devuelve el código de estado numérico. –

1

Se trata de un viejo hilo, pero he llegado hasta aquí en busca de información similar. Si es sólo el código de estado que está buscando, tal como 200, 404, 500, etc, entonces acaba de hacer:

your_curl_handle.getinfo(pycurl.RESPONSE_CODE)

que debe devolver un código de estado numérico :)

Cuestiones relacionadas