2010-07-13 23 views
30

Estoy tratando de crear una super-simplista Virtual In/Out Board usando wx/Python. Tengo el siguiente código en su sitio para una de mis peticiones al servidor donde voy a almacenar los datos:Python URLLib/URLLib2 POST

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

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

for line in u.readlines(): 
    print line 

Nada va especial allí. El problema que tengo es que, en función de cómo leo los documentos, esto debe realizar una solicitud de publicación porque he proporcionado el parámetro de datos y eso no está sucediendo. Tengo este código en el índice para esa url:

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

echo $_POST['q']; 

Y cada vez que paso la aplicación Python consigo el 'Ninguna acción especificada' texto impreso a mi consola. Voy a tratar de implementarlo usando Request Objects, ya que he visto algunas demos que incluyen esas, pero me pregunto si alguien puede ayudarme a explicar por qué no obtengo una Post Request con este código. ¡Gracias!

- EDITADO -

Este código de trabajo y mensajes a mi página web correctamente:

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() 

Todavía estoy seguro de por qué la biblioteca urllib2 no POST cuando proporciono el parámetro de datos - para mí los documentos indican que debería.

+0

¿Por qué no usas 'urllib2'? –

+3

Yo soy. 'urllib2.urlopen'. Solo estoy usando urllib para codificar los datos de la publicación. –

Respuesta

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

Mediante la ruta /inout-tracker sin una posterior / no ha podido recuperar index.php. En su lugar, el servidor emitirá un 302 redirigir a la versión con el / posterior.

Hacer un 302 generalmente hará que los clientes conviertan un POST a una solicitud GET.

+7

¡Esta respuesta fue perfecta! El módulo urllib2 de Python 2.6 cambia de POST a GET en el redireccionamiento. Esto ocurre no solo con una barra inclinada hacia adelante, sino que también puede ocurrir en los casos en que http se redirige a https. – Hazok

+2

Tu 'u' no hace nada allí. – oneloop