J'ai trouvé ce code et il m'a semblé fiable et efficace mais malheureusement c'est pour python2 et il utilise aussi urllib2 alors que tout le monde dit que les requêtes sont plus rapides. Quel serait le code équivalent de ce qui suit (ou quelque chose de plus efficace ou plus fiable) dans python 3?Python - le moyen le plus efficace d'obtenir une requête en 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())
D'ailleurs la demande de tête n'est pas vraiment ce dont j'ai besoin. Je veux seulement savoir si le lien est cassé (dans certains sites si vous leur donnez un code cassé ils vous redirigeront vers la page principale du site et je veux que mon code le reconnaisse aussi) et la requête de tête est la plus efficace solution qui me vient à l'esprit pour cela, donc si vous connaissez une meilleure façon, j'apprécierais aussi cela.
On ne va traduire votre code. Commencez par vous-même et si vous avez une question * spécifique *, vous pouvez le demander ici. –