Quel est le moyen le plus rapide de HTTP GET en Python si je sais que le contenu sera une chaîne? Je recherche dans la documentation une ligne rapide comme:
contents = url.get("http://example.com/foo/bar")
Mais tout ce que je peux trouver en utilisant Google est httplib
et urllib
- et je ne trouve pas de raccourci dans ces bibliothèques.
Est-ce que Python 2.5 standard a un raccourci sous une forme comme ci-dessus, ou dois-je écrire une fonction url_get
?
- Je préférerais ne pas capturer la sortie du décorticage vers
wget
oucurl
.
python
http
networking
Frank Krueger
la source
la source
Réponses:
Python 3:
Python 2:
Documentation pour
urllib.request
etread
.la source
close
après toiread
. Est-ce que c'est nécessaire?read
. Mais unwith
bloc serait plus clair et plus sûr pour Jython, etc.requests
fonctionne bienr = urllib2.urlopen("http://blah.com/blah")
et puistext = r.read()
. Il est synchronisé, il attend juste le résultat en "texte".Vous pouvez utiliser une bibliothèque appelée requêtes .
C'est assez simple. Ensuite, vous pouvez faire comme ceci:
la source
pip install
). Pour les bibliothèques non pures, il y a une étape supplémentaire - vous avez besoin depip install
la bibliothèque sur une instance d'AWS Linux (la même variante de système d'exploitation lambdas s'exécute sous), puis copiez ces fichiers à la place afin d'avoir une compatibilité binaire avec AWS Linux. Les seules bibliothèques que vous ne pourrez pas toujours utiliser dans Lambda sont celles avec des distributions binaires uniquement, heureusement assez rares.pip install requests
.from botocore.vendored import requests
Utilisationresponse = requests.get('...')
Si vous voulez que la solution avec httplib2 soit intégrée, pensez à instancier un objet Http anonyme
la source
Jetez un œil à httplib2 , qui - à côté de nombreuses fonctionnalités très utiles - fournit exactement ce que vous voulez.
Où le contenu serait le corps de la réponse (sous forme de chaîne) et resp contiendrait les en-têtes de statut et de réponse.
Cependant, il n'est pas inclus avec une installation standard de python (mais il ne nécessite que du python standard), mais cela vaut vraiment la peine d'être vérifié.
la source
C'est assez simple avec la puissante
urllib3
bibliothèque.Importez-le comme ceci:
Et faites une demande comme celle-ci:
Vous pouvez également ajouter des en-têtes:
Plus d'informations peuvent être trouvées sur la documentation urllib3 .
urllib3
est beaucoup plus sûr et plus facile à utiliser que le module intégréurllib.request
ou leshttp
modules et est stable.la source
La solution de theller pour wget est vraiment utile, cependant, j'ai trouvé qu'elle n'imprimait pas la progression tout au long du processus de téléchargement. C'est parfait si vous ajoutez une ligne après la déclaration d'impression dans reporthook.
la source
Voici un script wget en Python:
la source
Sans autres importations nécessaires, cette solution fonctionne (pour moi) - également avec https:
J'ai souvent du mal à saisir le contenu lorsque je ne spécifie pas un "User-Agent" dans les informations d'en-tête. Ensuite, les demandes sont généralement annulées avec quelque chose comme:
urllib2.HTTPError: HTTP Error 403: Forbidden
ouurllib.error.HTTPError: HTTP Error 403: Forbidden
.la source
Comment envoyer également des en-têtes
Python 3:
Python 2:
la source
Si vous travaillez spécifiquement avec des API HTTP, il existe également des choix plus pratiques tels que Nap .
Par exemple, voici comment obtenir des informations sur Github depuis le 1er mai 2014 :
Plus d'exemples: https://github.com/kimmobrunfeldt/nap#examples
la source
Excellentes solutions Xuan, Theller.
Pour qu'il fonctionne avec python 3, apportez les modifications suivantes
En outre, l'URL que vous entrez doit être précédée d'un "http: //", sinon elle renvoie une erreur de type d'URL inconnue.
la source
Pour
python >= 3.6
, vous pouvez utiliser dload :Pour
json
:Installer:
pip install dload
la source
En fait, en python, nous pouvons lire à partir d'URL comme à partir de fichiers, voici un exemple pour lire json à partir de l'API.
la source
Si vous voulez une API de niveau inférieur:
la source