Bien qu'il existe des moyens de gérer authentication in urllib2, si vous êtes autorisation de base faisant, (ce qui signifie envoyer efficacement le nom d'utilisateur et mot de passe en texte clair), vous pouvez faire tout ce que vous voulez avec un urllib2.Request et urllib2.urlopen:
import urllib2
def basic_authorization(user, password):
s = user + ":" + password
return "Basic " + s.encode("base64").rstrip()
req = urllib2.Request("http://localhost:8000/36576/speak.json",
headers = {
"Authorization": basic_authorization("7898678", "X"),
"Content-Type": "application/json",
# Some extra headers for fun
"Accept": "*/*", # curl does this
"User-Agent": "my-python-app/1", # otherwise it uses "Python-urllib/..."
},
data = '{"message":{"body":"TEXT"}}')
f = urllib2.urlopen(req)
Je l'ai testé cela avec netcat pour que je puisse voir que les données envoyées étaient, à l'exception de l'ordre de tri, identiques dans les deux cas. Ici, le premier a été fait avec boucle et le second avec urllib2
% nc -l 8000
POST /36576/speak.json HTTP/1.1
Authorization: Basic Nzg5ODY3ODpY
User-Agent: curl/7.19.4 (universal-apple-darwin10.0) libcurl/7.19.4 OpenSSL/0.9.8k zlib/1.2.3
Host: localhost:8000
Accept: */*
Content-Type: application/json
Content-Length: 27
{"message":{"body":"TEXT"}} ^C
% nc -l 8000
POST /36576/speak.json HTTP/1.1
Accept-Encoding: identity
Content-Length: 27
Connection: close
Accept: */*
User-Agent: my-python-app/1
Host: localhost:8000
Content-Type: application/json
Authorization: Nzg5ODY3ODpY
{"message":{"body":"TEXT"}}^C
(Ceci est légèrement modifié de la sortie. Mon cas de test n'a pas utilisé le même chemin d'URL que vous avez utilisé.)
Il n'y a pas besoin d'utiliser le httplib sous-jacent, qui ne supporte pas les choses qu'urllib2 vous donne comme support proxy. D'autre part, je trouve que urllib2 est compliqué en dehors de ce type de requête simple et si vous voulez un meilleur support pour les en-têtes qui sont envoyés et l'ordre qu'ils sont envoyés, utilisez httplib.
Rendez-vous ici - http://stackoverflow.com/questions/4348061/how-to-use-python-urllib2-to-send-json- data-for-login/7469725 # 7469725 – treecoder