2010-07-13 7 views
30

Sto provando a creare un Virtual In/Out super-semplicistico usando wx/Python. Ho il seguente codice nel luogo per una delle mie richieste al server dove sarò la memorizzazione dei dati:Python URLLib/URLLib2 POST

data = urllib.urlencode({'q': 'Status'}) 

u = urllib2.urlopen('http://myserver/inout-tracker', data) 

for line in u.readlines(): 
    print line 

Niente di speciale succedendo lì. Il problema che sto avendo è che, in base a come leggo i documenti, questo dovrebbe eseguire una richiesta di post perché ho fornito il parametro data e questo non sta accadendo. Ho questo codice nella indice per tale URL:

if (!isset($_POST['q'])) { die ('No action specified'); } 

echo $_POST['q']; 

E ogni volta che eseguo il mio Python App ho la 'Nessuna azione specificata' il testo stampato per la mia console. Ho intenzione di provare a implementarlo utilizzando gli oggetti di richiesta come ho visto alcune demo che includono quelle, ma mi chiedo se qualcuno può aiutarmi a spiegare perché non ottengo una richiesta di post con questo codice. Grazie!

- A CURA -

Questo codice non lavoro e messaggi alla mia pagina web correttamente:

data = urllib.urlencode({'q': 'Status'}) 

h = httplib.HTTPConnection('myserver:8080') 

headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"} 

h.request('POST', '/inout-tracker/index.php', data, headers) 

r = h.getresponse() 

print r.read() 

io sono ancora incerto perché la libreria urllib2 non post quando fornisco il parametro dei dati - per me i documenti indicano che dovrebbe.

+0

Perché non stai usando 'urllib2'? –

+3

Io sono. 'Urllib2.urlopen'. Sto solo usando urllib per codificare i dati del post. –

risposta

41
u = urllib2.urlopen('http://myserver/inout-tracker', data) 
h.request('POST', '/inout-tracker/index.php', data, headers) 

Utilizzando il percorso /inout-tracker senza trascinamento / non recuperare index.php. Invece il server invierà un reindirizzamento 302 alla versione con il finale /.

Fare un 302 causa in genere che i client convertano un POST in una richiesta GET.

+7

Questa risposta è stata perfetta! Il modulo urllib2 di Python 2.6 passa da POST a GET sul reindirizzamento. Ciò si verifica non solo con una barra rovesciata in avanti, ma può verificarsi anche nei casi in cui http viene reindirizzato a https. – Hazok

+2

Il tuo 'u' non fa niente lì. – oneloop