Obtenez l'URL de la destination de la redirection HTTP en Python

Aperçu

Code source

Enregistrez le contenu suivant sous le nom de fichier get_redirect.py.

get_redirect.py


import sys
import urllib.request

#Classe de gestionnaire qui ne redirige pas
class NoRedirectHandler(urllib.request.HTTPRedirectHandler):
  # HTTPRedirectHandler.redirect_Remplacer la demande
  def redirect_request(self, req, fp, code, msg, hdrs, newurl):
    self.newurl = newurl #Retenir l'URL de destination de la redirection
    return None

#Fonction pour obtenir l'URL de destination de la redirection
def get_redirect_url(src_url):
  #Définir des gestionnaires qui ne redirigent pas
  no_redirect_handler = NoRedirectHandler()
  opener = urllib.request.build_opener(no_redirect_handler)
  try:
    with opener.open(src_url) as res:
      return None #C'était une URL qui ne redirigeait pas
  except urllib.error.HTTPError as e:
    if hasattr(no_redirect_handler, "newurl"):
      return no_redirect_handler.newurl #Renvoie l'URL de destination de la redirection
    else:
      raise e #Renvoyer car il s'agit d'une exception qui s'est produite autre que la redirection

#Obtenir des arguments de ligne de commande
src_url = sys.argv[1]

#Obtenir l'URL de destination de la redirection
redirect_url = get_redirect_url(src_url)

#URL de destination de la redirection de sortie
if redirect_url is not None:
  print(redirect_url)

Exemple d'exécution.

$ python get_redirect.py https://bit.ly/3kmTOkc
https://t.co/yITSBp4ino
$ python get_redirect.py https://t.co/yITSBp4ino
https://qiita.com/niwasawa
$ python get_redirect.py https://qiita.com/niwasawa

Version simplifiée

Enregistrez le contenu suivant sous le nom de fichier get_redirect.py.

get_redirect.py


import sys
import urllib.request

#Fonction pour obtenir l'URL de destination de la redirection
def get_redirect_url(src_url):
  with urllib.request.urlopen(src_url) as res:
    url = res.geturl() #Obtenez l'URL finale
    if src_url == url:
      return None #Non redirigé car il est identique à l'URL spécifiée
    else:
      return url #Redirection car elle est différente de l'URL spécifiée

#Obtenir des arguments de ligne de commande
src_url = sys.argv[1]

#Obtenir l'URL de destination de la redirection
redirect_url = get_redirect_url(src_url)

#URL de destination de la redirection de sortie
if redirect_url is not None:
  print(redirect_url)

Exemple d'exécution. Dans la version simplifiée, une requête est envoyée à l'URL de destination de la redirection, et dans le cas d'une redirection en plusieurs étapes, l'URL finale est sortie.

$ python get_redirect.py https://bit.ly/3kmTOkc
https://qiita.com/niwasawa
$ python get_redirect.py https://t.co/yITSBp4ino
https://qiita.com/niwasawa
$ python get_redirect.py https://qiita.com/niwasawa

Matériel de référence

Recommended Posts

Obtenez l'URL de la destination de la redirection HTTP en Python
Récupérer l'appelant d'une fonction en Python
Comment obtenir le nombre de chiffres en Python
[python] Récupère la liste des classes définies dans le module
Obtenir la taille (nombre d'éléments) de Union Find en Python
Obtenez le chemin du bureau en Python
Obtenez le chemin du script en Python
Obtenez le chemin du bureau en Python
Obtenez le nom d'hôte en Python
Obtenez le nombre d'éléments spécifiques dans la liste python
Obtenez l'index de chaque élément de la matrice de confusion en Python
Vérifiez le comportement du destroyer en Python
Vérifiez si l'URL existe en Python
Le résultat de l'installation de python sur Anaconda
[python] Obtenez le rang des valeurs dans la liste par ordre croissant / décroissant
Principes de base pour exécuter NoxPlayer en Python
À la recherche du FizzBuzz le plus rapide en Python
[Python] Récupère le code de caractère du fichier
Débarrassez-vous des images DICOM en Python
Obtenez le titre et la date de livraison de Yahoo! News en Python
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Python VBA pour obtenir une capture de la page WEB entière avec Selenium
Obtenez une instance datetime à tout moment de la journée en Python
Obtenez la clé pour la migration de la deuxième couche de données JSON avec python
Récupérer le contenu de git diff depuis python
Sortie du nombre de cœurs de processeur en Python
[Python] Récupérez les fichiers dans le dossier avec Python
Obtenez la météo à Osaka via l'API Web (python)
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
[Python] Obtenir / modifier l'étiquette d'échelle de la figure
[Python] Obtenez les principaux sujets de Yahoo News
Faites correspondre la distribution de chaque groupe en Python
Afficher le résultat du traitement de la géométrie en Python
Obtenir l'URL de l'image à l'aide de l'API Flickr en Python
Copiez la liste en Python
Obtenez le titre de la fenêtre du système X Window en Python
Découvrez la fraction de la valeur saisie en python
[Python] Obtenez la dernière date de mise à jour du site Web
Comment obtenir les fichiers dans le dossier [Python]
Trouvez la solution de l'équation d'ordre n avec python
L'histoire de la lecture des données HSPICE en Python
[Note] À propos du rôle du trait de soulignement "_" en Python
Sortie sous la forme d'un tableau python
Touchons une partie de l'apprentissage automatique avec Python
Émettre l'URL signée Amazon CloudFront en Python
[Python] Get the day (anglais et japonais)
Obtenez la date de mise à jour du fichier de mémorandum Python.
le zen de Python
Obtenir la date en Python
Obtenir l'heure Unix de l'heure spécifiée par JST quel que soit le fuseau horaire du serveur avec Python
Obtenez le dernier élément du tableau en fractionnant les chaînes en Python et PHP
Comment obtenir une liste de fichiers dans le même répertoire avec python
Comment obtenir le nom de la variable lui-même en python
[Python] Obtenez le chemin d'accès officiel du fichier de raccourci (.lnk)
[Python] Récupérez le texte de la loi à partir de l'API e-GOV law
[Python] Obtenez les nombres dans l'image graphique avec OCR
Récupérer le code retour d'un script Python depuis bat
Explorez l'URL contenue dans le tweet Twitter avec python
L'histoire de FileNotFound en Python open () mode = 'w'
Obtenez des résultats au format dict avec Python psycopg2