How to read the header with pycurl

匿名 (未验证) 提交于 2019-12-03 02:47:02

问题:

How do I read the response headers returned from a PyCurl request?

回答1:

There are several solutions (by default, they are dropped). Here is an example using the option HEADERFUNCTION which lets you indicate a function to handle them.

Other solutions are options WRITEHEADER (not compatible with WRITEFUNCTION) or setting HEADER to True so that they are transmitted with the body.

#!/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 


回答2:

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() 

Add any other curl setopts as necessary/desired, such as FOLLOWLOCATION.



回答3:

Anothr alternate, human_curl usage: 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': '*'} 


回答4:

This might or might not be an alternative for you:

import urllib headers = urllib.urlopen('http://www.pythonchallenge.com').headers.headers 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!