usa tutorial sobre que para instalar index funciona elastic crear como comandos python libcurl pycurl http-status

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.