J'ai besoin de télécharger des données sur un serveur en utilisant HTTP PUT
en python. D'après ma brève lecture des documents urllib2, il ne fait que HTTP POST
. Existe-t-il un moyen de faire un HTTP PUT
en python?
220
J'ai utilisé une variété de bibliothèques HTTP python dans le passé, et j'ai choisi " Requêtes " comme mon préféré. Les bibliothèques existantes avaient des interfaces assez utilisables, mais le code peut finir par être trop long pour quelques opérations simples. Un PUT de base dans les requêtes ressemble à:
payload = {'username': 'bob', 'email': '[email protected]'}
>>> r = requests.put("http://somedomain.org/endpoint", data=payload)
Vous pouvez ensuite vérifier le code d'état de réponse avec:
r.status_code
ou la réponse avec:
r.content
Les demandes contiennent beaucoup de sucre et de raccourcis synactiques qui vous faciliteront la vie.
json=payload
paramètre si vous souhaitez que les données soient dans le corps.la source
requests
bibliothèque à la place.Httplib semble être un choix plus propre.
la source
Vous devriez jeter un œil au module httplib . Il devrait vous permettre de faire la sorte de requête HTTP que vous souhaitez.
la source
J'avais aussi besoin de résoudre ce problème il y a quelque temps pour pouvoir agir en tant que client pour une API RESTful. J'ai opté pour httplib2 car cela m'a permis d'envoyer PUT et DELETE en plus de GET et POST. Httplib2 ne fait pas partie de la bibliothèque standard mais vous pouvez facilement l'obtenir auprès de la fromagerie.
la source
Vous pouvez utiliser la bibliothèque de requêtes, cela simplifie beaucoup les choses par rapport à l'approche urllib2. Installez-le d'abord à partir de pip:
Plus d'informations sur l' installation des demandes .
Ensuite, configurez la demande de vente:
Voir la bibliothèque de démarrage rapide pour les demandes . Je pense que c'est beaucoup plus simple que urllib2 mais nécessite que ce package supplémentaire soit installé et importé.
la source
Cela a été amélioré en python3 et documenté dans la documentation stdlib
La
urllib.request.Request
classe a gagné unmethod=...
paramètre en python3.Quelques exemples d'utilisation:
la source
Je recommande également httplib2 par Joe Gregario. Je l'utilise régulièrement au lieu de httplib dans la bibliothèque standard.
la source
Avez-vous jeté un œil à put.py ? Je l'ai utilisé dans le passé. Vous pouvez également pirater votre propre demande avec urllib.
la source
Vous pouvez bien sûr rouler les vôtres avec les bibliothèques standard existantes à n'importe quel niveau, des sockets jusqu'à peaufiner urllib.
http://pycurl.sourceforge.net/
"PyCurl est une interface Python pour libcurl."
"libcurl est une bibliothèque de transfert d'URL côté client gratuite et facile à utiliser, ... prend en charge ... HTTP PUT"
"Le principal inconvénient de PycURL est qu'il s'agit d'une couche relativement mince sur libcurl sans aucune de ces belles hiérarchies de classes Pythonic. Cela signifie qu'il a une courbe d'apprentissage quelque peu abrupte à moins que vous ne soyez déjà familier avec l'API C de libcurl."
la source
Si vous souhaitez rester dans la bibliothèque standard, vous pouvez sous
urllib2.Request
- classer :la source
Une façon plus appropriée de le faire
requests
serait:Cela déclenche une exception s'il y a une erreur dans la demande HTTP PUT.
la source