Quelle est la façon la plus propre de faire HTTP POST avec Basic Auth en Python?
Utiliser uniquement les bibliothèques de base Python.
Sérieusement, utilisez simplement requests
:
import requests
resp = requests.post(url, data={}, auth=('user', 'pass'))
C'est une pure bibliothèque python, l'installation est aussi simple que easy_install requests
ou pip install requests
. Il possède une API extrêmement simple et facile à utiliser, et il corrige des bogues dans urllib2
pour que vous n'ayez pas à le faire. Ne vous compliquez pas la vie à cause d'exigences idiotes qui s'imposent.
Solutions de contournement hackish:
urllib.urlopen("https://username:password@hostname/path", data)
Beaucoup de gens ne réalisent pas que l'ancienne syntaxe pour spécifier le nom d'utilisateur et le mot de passe dans l'URL fonctionne dans urllib.urlopen
. Il ne semble pas que le nom d'utilisateur ou le mot de passe ne nécessitent aucun encodage, sauf peut-être si le mot de passe comprend un symbole "@".
si vous définissez une URL, un nom d'utilisateur, un mot de passe et quelques post-données, cela devrait fonctionner en Python2 ...
import urllib2
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, username, password)
auth_handler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
content = urllib2.urlopen(url, post_data)
exemple de documents officiels Python montrant l'authentification de base dans urllib2: * http://docs.python.org/release/2.6/howto/urllib2.html
tutoriel complet sur l'authentification de base en utilisant urllib2: * http://www.voidspace.org.uk/python/articles/authentication.shtml