Pergunta

Como faço para ler os cabeçalhos de resposta de voltar de uma solicitação pycurl?

Foi útil?

Solução

Existem várias soluções (por padrão, eles são descartados). Aqui está um exemplo usando a HEADERFUNCTION opção que permite indicar um função para lidar com eles.

Outras soluções são opções WRITEHEADER (não compatível com WRITEFUNCTION) ou a criação de cabeçalho para True para que elas são transmitidas com o corpo.

#!/usr/bin/python

import pycurl
import sys

class Storage:
    def __init__(self):
        self.contents = ''
        self.line = 0

    def store(self, buf):
        self.line = self.line + 1
        self.contents = "%s%i: %s" % (self.contents, self.line, buf)

    def __str__(self):
        return self.contents

retrieved_body = Storage()
retrieved_headers = Storage()
c = pycurl.Curl()
c.setopt(c.URL, 'http://www.demaziere.fr/eve/')
c.setopt(c.WRITEFUNCTION, retrieved_body.store)
c.setopt(c.HEADERFUNCTION, retrieved_headers.store)
c.perform()
c.close()
print retrieved_headers
print retrieved_body

Outras dicas

import pycurl
from StringIO import StringIO

headers = StringIO()

c = pycurl.Curl()
c.setopt(c.URL, url)
c.setopt(c.HEADER, 1)
c.setopt(c.NOBODY, 1) # header only, no body
c.setopt(c.HEADERFUNCTION, headers.write)

c.perform()

print headers.getvalue()

Adicione quaisquer outros setopts onda conforme necessário / desejado, como FOLLOWLOCATION.

Anothr alternativo, uso human_curl: pip human_curl

In [1]: import human_curl as hurl

In [2]: r = hurl.get("http://stackoverflow.com")

In [3]: r.headers
Out[3]: 
{'cache-control': 'public, max-age=45',
 'content-length': '198515',
 'content-type': 'text/html; charset=utf-8',
 'date': 'Thu, 01 Sep 2011 11:53:43 GMT',
 'expires': 'Thu, 01 Sep 2011 11:54:28 GMT',
 'last-modified': 'Thu, 01 Sep 2011 11:53:28 GMT',
 'vary': '*'}

Esta pode ou não ser uma alternativa para você:

import urllib
headers = urllib.urlopen('http://www.pythonchallenge.com').headers.headers
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top