Python URLLib / URLLib2 POST - PullRequest
       22

Python URLLib / URLLib2 POST

36 голосов
/ 13 июля 2010

Я пытаюсь создать супер-упрощенную виртуальную плату ввода-вывода, используя wx / Python. У меня есть следующий код для одного из моих запросов к серверу, на котором я буду хранить данные:

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

Ничего особенного там не происходит. У меня проблема в том, что, основываясь на том, как я читаю документы, это должно выполнить запрос Post, потому что я предоставил параметр данных, а этого не происходит. У меня есть этот код в индексе для этого URL:

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

И каждый раз, когда я запускаю свое приложение Python, я получаю текст «Не указано действие», напечатанный на моей консоли. Я попытаюсь реализовать его, используя объекты запроса, так как я видел несколько демонстраций, которые включают их, но мне интересно, может ли кто-нибудь помочь мне объяснить, почему я не получаю запрос Post с этим кодом. Спасибо!

- отредактировано -

Этот код работает и правильно отправляет сообщения на мою веб-страницу:

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

Я до сих пор не уверен, почему библиотека urllib2 не публикует, когда я предоставляю параметр данных - для меня документы указывают, что она должна.

1 Ответ

46 голосов
/ 13 июля 2010
u = urllib2.urlopen('http://myserver/inout-tracker', data)
h.request('POST', '/inout-tracker/index.php', data, headers)

Использование пути /inout-tracker без трейлинга / не вызывает index.php. Вместо этого сервер выдаст перенаправление 302 на версию с завершающим /.

Выполнение 302 обычно приводит к тому, что клиенты преобразуют POST в GET-запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...