PyCurl リクエストから返された応答ヘッダーを読み取るにはどうすればよいですか?
16795 次
4 に答える
30
いくつかの解決策があります (デフォルトでは、それらは削除されます)。以下は、それらを処理する関数を指定できるオプション HEADERFUNCTION を使用した例です。
他の解決策は、オプション WRITEHEADER (WRITEFUNCTION とは互換性がありません)、または HEADER を True に設定して、本文と共に送信されるようにすることです。
#!/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
于 2009-01-23T08:13:57.077 に答える
17
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()
FOLLOWLOCATION など、必要に応じてその他の curl setopts を追加します。
于 2014-02-05T01:20:49.777 に答える
6
別の代替、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': '*'}
于 2011-09-01T11:54:40.897 に答える
1
これはあなたの代わりになるかもしれませんし、そうでないかもしれません:
import urllib
headers = urllib.urlopen('http://www.pythonchallenge.com').headers.headers
于 2009-01-23T09:26:00.347 に答える