Подтвердить что ты не робот

Python URLLib/URLLib2 POST

Я пытаюсь создать супер-упрощенную виртуальную плату ввода-вывода, используя 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 не публикует, когда я предоставляю параметр данных - для меня документы указывают, что это должно.

4b9b3361

Ответ 1

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.