私はこのコードを見つけましたが、それは信頼できると効率的でしたが、残念ながらpython2のためだし、誰もがリクエストが速いと言っている間urllib2を使用しています。 Python 3では、以下のコード(またはより効率的で信頼性の高いもの)の同等のコードは何でしょうか?Python - 最も効率的なpythonでヘッドリクエストを取得する方法3
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import sys
import urllib2
# This script uses HEAD requests (with fallback in case of 405)
# to follow the redirect path up to the real URL
# (c) 2012 Filippo Valsorda - FiloSottile
# Released under the GPL license
class HeadRequest(urllib2.Request):
def get_method(self):
return "HEAD"
class HEADRedirectHandler(urllib2.HTTPRedirectHandler):
"""
Subclass the HTTPRedirectHandler to make it use our
HeadRequest also on the redirected URL
"""
def redirect_request(self, req, fp, code, msg, headers, newurl):
if code in (301, 302, 303, 307):
newurl = newurl.replace(' ', '%20')
newheaders = dict((k,v) for k,v in req.headers.items()
if k.lower() not in ("content-length", "content-type"))
return HeadRequest(newurl,
headers=newheaders,
origin_req_host=req.get_origin_req_host(),
unverifiable=True)
else:
raise urllib2.HTTPError(req.get_full_url(), code, msg, headers, fp)
class HTTPMethodFallback(urllib2.BaseHandler):
"""
Fallback to GET if HEAD is not allowed (405 HTTP error)
"""
def http_error_405(self, req, fp, code, msg, headers):
fp.read()
fp.close()
newheaders = dict((k,v) for k,v in req.headers.items()
if k.lower() not in ("content-length", "content-type"))
return self.parent.open(urllib2.Request(req.get_full_url(),
headers=newheaders,
origin_req_host=req.get_origin_req_host(),
unverifiable=True))
# Build our opener
opener = urllib2.OpenerDirector()
for handler in [urllib2.HTTPHandler, urllib2.HTTPDefaultErrorHandler,
HTTPMethodFallback, HEADRedirectHandler,
urllib2.HTTPErrorProcessor, urllib2.HTTPSHandler]:
opener.add_handler(handler())
response = opener.open(HeadRequest(sys.argv[1]))
print(response.geturl())
ところでヘッド要求は実際に私が必要としているものではありません。私は、リンクが壊れているかどうかを知りたいだけです(あなたが壊れたコードを与えるとサイトのメインページにリダイレクトされ、私のコードもこれを認識したいと思うサイトでは頭のリクエストが最も効率的です)このために私の心に来た解決策は、あなたがより良い方法を知っているなら、私はそれを感謝するでしょう。
を返すGET要求にを返すHEAD要求の例を見てきました。あなた自身で始めて、*具体的な質問があれば、ここでそれを聞くことができます。 –