web-dev-qa-db-fra.com

Quelle est la façon la plus propre de faire HTTP POST avec l'authentification de base en Python?

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.

28
Epeli

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.

63
zeekay

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 "@".

8
user1740078

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

5
Corey Goldberg