web-dev-qa-db-fra.com

Python URLLib / URLLib2 POST

J'essaie de créer une carte d'entrée/sortie virtuelle super simpliste en utilisant wx/Python. J'ai le code suivant en place pour l'une de mes demandes au serveur où je stocke les données:

data = urllib.urlencode({'q': 'Status'})
u = urllib2.urlopen('http://myserver/inout-tracker', data)
for line in u.readlines():
  print line

Rien de spécial là-bas. Le problème que j'ai, c'est que, selon la façon dont je lis les documents, cela devrait effectuer une demande de publication, car j'ai fourni le paramètre de données et cela ne se produit pas. J'ai ce code dans l'index de cette URL:

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

Et chaque fois que j'exécute mon Python App, je reçois le texte 'Aucune action spécifiée' imprimé sur ma console. Je vais essayer de l'implémenter en utilisant les objets de requête comme j'ai vu un quelques démos qui les incluent, mais je me demande si quelqu'un peut m'aider à expliquer pourquoi je n'ai pas de demande de publication avec ce code. Merci!

- MODIFIÉ -

Ce code fonctionne et publie correctement sur ma page Web:

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

Je ne sais toujours pas pourquoi la bibliothèque urllib2 ne publie pas lorsque je fournis le paramètre de données - pour moi, les documents indiquent qu'il le devrait.

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

Utilisation du chemin /inout-tracker sans signe de fin / ne récupère pas index.php. Au lieu de cela, le serveur émettra un 302 rediriger vers la version avec le dernier /.

Faire un 302 oblige généralement les clients à convertir un POST en une requête GET.

46
bobince