python - tutorial - ¿Cómo obtener el mensaje de estado HTTP en(py) curl?
todo sobre elasticsearch (4)
Pasando un tiempo estudiando la documentación de pycurl y libcurl, todavía no puedo encontrar una forma (simple) de cómo obtener el mensaje de estado HTTP (razón-frase) en pycurl.
El 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"
Creo que puedes usar la biblioteca human_curl para crear tu código simple.
>>> import human_curl as hurl
>>> r = hurl.get(''http://example.org'')
>>> print r.status_code
200
La documentación completa en human_curl puede obtener en https://github.com/Lispython/human_curl
Este es un hilo viejo, pero llegué aquí buscando información similar. Si solo busca el código de estado, como 200, 404, 500, etc., simplemente haga lo siguiente:
your_curl_handle.getinfo(pycurl.RESPONSE_CODE)
que debe devolver un código de estado numérico :)
He encontrado una solución, que hace lo que necesito, pero podría ser más robusta (funciona para HTTP).
se basa en el 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"
Pruebe BaseHTTPServer.BaseHTTPRequestHandler.responses, debe contener un código de error como se explica en esta página .
espero que esto ayude.