Ce module fournit une interface de haut niveau pour récupérer des données sur le Web. En particulier, la fonction urlopen() est similaire à la fonction intégrée open(), mais accepte les Universal Resource Locators (URLs) au lieu des noms de fichiers. Certaines restrictions s'appliquent - on ne peut ouvrir des URL qu'en lecture, et on ne peut pas effectuer d'opération de recherche.
Il définit les fonctions publiques suivantes:
Sauf pour les méthodes info() et geturl(), ces méthodes ont la même interface que les objets fichiers - voir la section 2.1.7.9 dans ce manuel. (Ce n'est pas un vrai objet fichier intégré, cependant, donc on ne peut pas s'en servir dans les quelques rares cas où il faut un vrai objet fichier intégré.)
La méthode info() retourne une instance de la classe mimetools.Message contenant des méta-informations associées à l'URL. Quand le protocole est HTTP, ces entêtes sont ceux renvoyés par le serveur au début de la page HTML récupérée (y compris Content-Length et Content-Type). Quand le protocole est FTP, un entête Content-Length sera présent si (comme c'est maintenant habituel) le serveur a envoyé une longueur de fichier en réponse à la requête de récupération FTP. Quand le protocole est file (fichier local), les entêtes renvoyés incluent une Date, représentant la date de dernière modification du fichier, un Content-Length qui donne la taille du fichier, et un Content-Type qui est un pronostic sur le type de fichier. Voir aussi la description du module mimetools.
La méthode geturl() retourne l'URL réelle de la page. Dans certains cas, le serveur HTTP redirige un client vers une autre URL. La fonction urlopen() gère ceci de façon transparente, mais dans certains cas l'appelant a besoin de ssavoir vers quelle URL le client a été redirigé. La méthode geturl() sert à connaître cette URL redirigée.
Si l'url utilise l'identificateur http:, on peut donner l'argument optionnel data pour spécifier une requête La fonction urlopen() marche de façon transparente avec les proxies qui ne requièrent pas l'authentification. Dans un environnement Unix ou Windows, donnez aux variables d'environnement $http_proxy, $ftp_proxy ou $gopher_proxy la valeur d'une URL qui identifie le serveur proxy avant de lancer l'interpréteur Python. Par exemple (le caractère "%" est l'invite de commande):
Dans un environnement Macintosh, urlopen() retrouvera l'information sur le proxy depuis Internet Config.
Les proxies qui requièrent l'authentification pour fonctionner ne sont pas pris en compte pour l'instant; ceci est considéré comme une limitation de l'implémentation.
Le second argument, s'il est présent, spécifie l'emplacement du fichier vers lequel copier (s'il est absent, l'emplacement sera un fichier temporaire avec un nom généré par le système). Le troisième argument, s'il est présent, est une fonction d'accroche qui sera appelée une fois à l'établissement de la connexion réseau et une fois après chaque lecture de bloc ultérieure. On passera à la fonction d'accroche trois arguments: un compteur du nombre de blocs transférés jusque là, une taille de bloc en octets, et la taille totale du bloc. Le troisième argument peut valoir Si l'url utilise l'identificateur http:, on peut donner l'argument optionnel data pour spécifier une requête Exemple: Exemple: Les fonctions publiques urlopen() et urlretrieve() créent une instance de la classe
FancyURLopener et l'utilisent pour effectuer les actions demandées. Pour surcharger cette fonctionnalité, les programmeurs peuvent créer une classe dérivée de URLopener ou FancyURLopener, puis assigner une instance de cette classe comme valeur de la variable Par défaut, la classe URLopener envoie comme entête Des mots-clés supplémentaires, rassemblés dans x509, servent à l'authentification pour le protocole https:. Les mos-clés key_file et cert_file sont pris en charge; les deux sont nécessaires pour récupérer effectivement une ressource désignée par une URL https:.
Les paramètres pour le constructeur sont les mêmes que pour URLopener.
Restrictions:
urlopen(url[, data])
POST (normalement le type de requête est GET). L'argument data doit être dans le format standard application/x-www-form-urlencoded; voir la fonction urlencode() ci-dessous.
...
urlretrieve(url[, nomfichier[, accroche]])
(nomfichier, entetes) où nomfichier est le nom du fichier local sous lequel on peut trouver l'objet, et entetesest soit None (pour un objet local), soit ce que la méthode info() de l'objet retourné par urlopen() donne comme résultat (pour un objet distant, éventuellement caché). Les exceptions sont les mêmes que pour urlopen().
-1 sur les anciens serveurs FTP qui ne renvoient pas une taille de fichier en réponse à une requête de récupération.
POST (normalement le type de requête est GET). L'argument data doit être dans le format standard application/x-www-form-urlencoded; voir la fonction urlencode() ci-dessous.
urlcleanup()
quote(chaine[, garde])
'/'.
quote('/~connolly/') produit '/%7econnolly/'.
quote_plus(chaine[, garde])
unquote(chaine)
unquote('/%7Econnolly/') produit '/~connolly/'.
unquote_plus(chaine)
urlencode(dict)
POST. La chaîne résultante est une série de paires cle=valeur séparatées par des caractères "&", où cle et valeur sont codées avec la fonction quote_plus() ci-dessus.
urllib._urlopener avant d'appeler la fonction désirée. Par exemple, les applications peuvent demander à spécifier un entête user-agent différent de celui que URLopener définit. Ceci peut être réalisé avec le code suivant:
class AppURLopener(urllib.FancyURLopener):
def __init__(self, *args):
self.version = "App/1.7"
apply(urllib.FancyURLopener.__init__, (self,) + args)
urllib._urlopener = AppURLopener()
user-agent "urllib/VVV", où VVV est le numéro de version de urllib. Les applications peuvent définir leur propre entête user-agent en dérivant URLopener ou FancyURLopener et en donnant à l'attribut d'instance version la valeur appropriée avant d'appeler la méthode open().
location sert à récupérer l'URL effective. Pour les codes de réponse 401 (authentification requise), une authentification HTTP basique est effectuée.
content-type. Pour le protocole Gopher, le type d'information est encodé dans l'URL; il n'y a pas pour l'instant de moyen simple de l'extraire. Si les données retournées sont du HTML, vous pouvez utiliser le module htmllib pour les analyser.
Sous-sections