2017-09-29 10 views
0

私はこのコードを見つけましたが、それは信頼できると効率的でしたが、残念ながら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()) 

ところでヘッド要求は実際に私が必要としているものではありません。私は、リンクが壊れているかどうかを知りたいだけです(あなたが壊れたコードを与えるとサイトのメインページにリダイレクトされ、私のコードもこれを認識したいと思うサイトでは頭のリクエストが最も効率的です)このために私の心に来た解決策は、あなたがより良い方法を知っているなら、私はそれを感謝するでしょう。

+0

を返すGET要求にを返すHEAD要求の例を見てきました。あなた自身で始めて、*具体的な質問があれば、ここでそれを聞くことができます。 –

答えて

1

要求を見てみましょう:要求を行うにはhttp://docs.python-requests.org/en/master/

を、あなたは、単に行く:

import requests 

r=requests.head('http://www.example.com') 

次に、あなたはあなたが必要なもののためのオブジェクトにアクセスすることができます。たとえば、ステータスコード:

print r.status_code 

を更新: ページがライブであるかどうかを確認するために欠けている場合は、要求をGETしたいと思うでしょう。私は200応答と同じURL、私たちはあなたのコードを変換するつもりはありません500

関連する問題