POST командной строки дает нулевую длину содержимого - PullRequest
2 голосов
/ 08 января 2010

Я использую командную строку curl для выполнения POST через прокси, но мои данные формы исчезают до нулевой длины содержимого. Есть идеи, что я делаю не так?

Вот моя командная строка (используется общедоступная тестовая форма, чтобы другие могли ее попробовать):

curl -v --proxy-ntlm --proxy proxyserver:proxyport --proxy-user : -d "fname=a&lname=b" http://www.snee.com/xml/crud/posttest.cgi

-v = подробный
Следующие несколько аргументов помогают нам через прокси-сервер с использованием аутентификации Windows
-d = должен делать пост с заданными аргументами

Тем не менее, как ответ, так и подробный вывод на печать предполагают, что содержание формы исчезает. Завиток печатает «Content-Length: 0», а в возвращенном html отсутствуют оба аргумента и длина содержимого 0.

Ошибка, по-видимому, отсутствует на прокси-сервере, так как curl признает, что отправляет содержимое длиной 0. Кто-нибудь знает решение этой проблемы? Кто-нибудь еще видел это?

Обновление : этот человек , похоже, имеет ту же ошибку, но не предлагает никакого решения, кроме использования ntlm, которое мне нужно

Обновление 2 : Это определенно происходит только с аутентификацией NTLM, я попробовал альтернативный метод аутентификации, который работает. Кроме того, использование -F вместо -d (для данных в двоичной форме) приводит к сбою таким же образом.

Обновление 3 (временное решение) : Я немного обсудил список пользователей curl по этому поводу. Был предоставлен обходной путь, который должен использовать --proxy-anyauth вместо --proxy-ntlm. Я все еще исследую проблему, но этот метод работает для меня.

Ответы [ 2 ]

2 голосов
/ 10 января 2010

NTLM - это протокол ответа на вызов. Когда вы указываете, что собираетесь использовать NTLM, клиент сначала отправляет запрос без тела (чтобы не тратить пропускную способность отправки тела только для того, чтобы отклонить его запросом HTTP / 401 с сервера). Только после того, как протокол Вызова / Ответа будет завершен, тело будет действительно опубликовано.

Это вызывает ряд проблем в тех случаях, когда клиент ожидает NTLM, но прокси или сервер не имеет представления (и, следовательно, действует на 0-байтовом POST, никогда не вызывая клиента).

0 голосов
/ 11 февраля 2012

У меня возникла проблема при создании запроса с использованием HTTP-дайджеста. Эрик прав, керл пытается быть умным и не публиковать какие-либо данные, потому что знает, что ему придется делать запрос снова после получения запроса от сервера.

Оказывается, если вы укажете опцию --anyauth (которая запрашивает curl для автоматического определения метода аутентификации), первоначальный запрос будет включать все данные POST, и (в моем случае) сервер ответил как положено.

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