Переменные PUT отсутствуют между Python и Tomcat - PullRequest
2 голосов
/ 16 июля 2010

Я пытаюсь получить запрос PUT от Python в сервлет в Tomcat.Когда я попадаю в Tomcat, параметры отсутствуют.

Тот же код успешно работает для запросов POST, но не для PUT.

Вот клиент:

lConnection = httplib.HTTPConnection('localhost:8080')
lHeaders = {"Content-type": "application/x-www-form-urlencoded",
              "Accept": "text/plain"}
lParams = {'Username':'usr', 'Password':'password', 'Forenames':'First','Surname':'Last'}
lConnection.request("PUT", "/my/url/", urllib.urlencode(lParams), lHeaders)

Оказавшись на сервере, request.getParameter («Имя пользователя») возвращает ноль.

Кто-нибудь получил какие-либо подсказки о том, где я теряю параметры?

Ответы [ 3 ]

2 голосов
/ 16 июля 2010

Я не знаю, как выглядит сторона вашего кода на Tomcat или как Tomcat обрабатывает и обеспечивает доступ к параметрам запроса, но я предполагаю, что Tomcat не "автоматически" анализирует тело вашего запроса PUT вХорошие параметры запроса для вас.

Я столкнулся с точно такой же проблемой, используя встроенный фреймворк webapp (в Python) в App Engine.Он не анализировал тело моих PUT запросов в параметры запроса, доступные через self.request.get ('param'), даже если они поступали как application/x-www-form-urlencoded.

. Вам придетсяпроверьте со стороны Tomcat, чтобы подтвердить это.В конечном итоге вам может понадобиться получить доступ к телу запроса PUT и проанализировать параметры самостоятельно.

Следует ли ожидать, что ваша веб-инфраструктура автоматически проанализирует параметры application/x-www-form-urlencoded в запросах PUT(как и в случае POST запросов) является дискуссионным.

2 голосов
/ 16 июля 2010

Я попробовал ваш код, и кажется, что параметры попадают на сервер, используя этот код. Tcpdump дает:

PUT /my/url/ HTTP/1.1
Host: localhost
Accept-Encoding: identity
Content-Length: 59
Content-type: application/x-www-form-urlencoded
Accept: text/plain

Username=usr&Password=password&Surname=Last&Forenames=First

Таким образом, запрос переходит на другую сторону правильно, это должно быть что-то с конфигурацией tomcat или с кодом, который пытается прочитать параметры.

1 голос
/ 16 июля 2010

Я предполагаю здесь, но я думаю, что проблема в том, что PUT не предназначен для использования таким образом. Цель PUT - сохранить один объект, содержащийся в запросе, в ресурсе, названном в заголовках. Что это за имя и прочее?

Ваш тип контента - application/X-www-form-urlencoded, который представляет собой набор содержимого поля. PUT хочет что-то вроде закодированного файла. Вы знаете, одну группу данных она может где-то хранить.

...