用Python 2的Urllib2提出HTTP Head请求
-
09-10-2019 - |
题
我正在尝试使用Python 2进行页面的要求。
我在尝试
import misc_urllib2
.....
opender = urllib2.build_opener([misc_urllib2.MyHTTPRedirectHandler(), misc_urllib2.HeadRequest()])
和 misc_urllib2.py
包含
class HeadRequest(urllib2.Request):
def get_method(self):
return "HEAD"
class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler):
def __init__ (self):
self.redirects = []
def http_error_301(self, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(
self, req, fp, code, msg, headers)
result.redirect_code = code
return result
http_error_302 = http_error_303 = http_error_307 = http_error_301
但是我得到了
TypeError: __init__() takes at least 2 arguments (1 given)
如果我只是做
opender = urllib2.build_opener(misc_urllib2.MyHTTPRedirectHandler())
然后它可以正常工作
解决方案
这很好:
import urllib2
request = urllib2.Request('http://localhost:8080')
request.get_method = lambda : 'HEAD'
response = urllib2.urlopen(request)
print response.info()
用快速而肮脏的httpd进行了测试。
Server: BaseHTTP/0.3 Python/2.6.6
Date: Sun, 12 Dec 2010 11:52:33 GMT
Content-type: text/html
X-REQUEST_METHOD: HEAD
我添加了一个自定义标头字段x-request_method以显示其工作:)
这是httpd日志:
Sun Dec 12 12:52:28 2010 Server Starts - localhost:8080
localhost.localdomain - - [12/Dec/2010 12:52:33] "HEAD / HTTP/1.1" 200 -
编辑:也有 HTTPLIB2
import httplib2
h = httplib2.Http()
resp = h.request("http://www.google.com", 'HEAD')
其他提示
尝试httplib
>>> import httplib
>>> conn = httplib.HTTPConnection("www.google.com")
>>> conn.request("HEAD", "/index.html")
>>> res = conn.getresponse()
>>> print res.status, res.reason
200 OK
>>> print res.getheaders()
[('content-length', '0'), ('expires', '-1'), ('server', 'gws'), ('cache-control', 'private, max-age=0'), ('date', 'Sat, 20 Sep 2008 06:43:36 GMT'), ('content-type', 'text/html; charset=ISO-8859-1')]
问题在于您的班级headquest,它是从urllib2.requrest继承的。根据Doc的说法 urllib2.Request.__init__
签名是
__init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False)
因此,您必须将URL论点传达给它。在第二次尝试中,您只是不使用HeadRequest,这就是为什么它可以使用。
你不添加 HeadRequest
至 build_opener
或者 add_handler
应该这样称呼
opener = urllib2.build_opener(MyHTTPRedirectHandler)
response = opener.open(HeadRequest(url))
print response.getheaders()
不隶属于 StackOverflow