Mentre ci sono modi per gestire authentication in urllib2, se sei facendo base di autorizzazione (che significa in modo efficace l'invio del nome utente e la password in chiaro), allora si può fare tutto quello che vuoi con un urllib2.Request e 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)
ho provato questo con netcat così ho potuto vedere che i dati inviati erano, salvo ordine di classificazione, identici in entrambi i casi. Ecco il primo è stato fatto con l'arricciatura e la seconda 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
(Questo è leggermente ottimizzato dall'output. Il mio banco di prova non ha utilizzato lo stesso percorso URL che hai usato.)
Non c'è è necessario utilizzare il sottostante httplib, che non supporta le cose che urllib2 offre come supporto proxy. D'altra parte, trovo che urllib2 sia complicato al di fuori di questo semplice tipo di richiesta e se si desidera un supporto migliore per le intestazioni e l'ordine di invio, utilizzare httplib.
fonte
2010-01-02 21:19:03
Vai qui - http://stackoverflow.com/questions/4348061/how-to-use-python-urllib2-to-send-json- data-for-login/7469725 # 7469725 – treecoder