Si bien hay formas de manejar authentication in urllib2, si usted es al hacerlo básico de autorización (que significa el envío de forma efectiva el nombre de usuario y contraseña en texto claro), entonces usted puede hacer todo lo que quiera con un urllib2.Request y 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)
he probado esto con netcat por lo que pude Observe que los datos enviados fueron, excepto orden de clasificación, idénticos en ambos casos. Aquí, el primero de ellos se llevó a cabo con el enrollamiento y el segundo con 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
(esto es ligeramente ajustado de la salida. Mi caso de prueba no utilizó la misma dirección URL que utilizó.)
No hay necesita usar el httplib subyacente, que no es compatible con las cosas que urllib2 le da como soporte de proxy. Por otro lado, encuentro que urllib2 es complicado fuera de este tipo de solicitud simple y si desea una mejor asistencia para qué encabezados se envían y el orden en que se envían, utilice httplib.
Vaya aquí - http://stackoverflow.com/questions/4348061/how-to-use-python-urllib2-to-send-json- data-for-login/7469725 # 7469725 – treecoder