Использование Digest Auth и отправка данных POST с помощью curl

У меня есть вопрос относительно HTTP Digest Auth с использованием curl и одновременной отправкой данных публикации.

У меня есть REST API, и каждый ресурс в нем требует аутентификации. Я получаю доступ к своим ресурсам со своего сайта, используя php curl. Каждый ресурс должен проходить аутентификацию с использованием дайджеста.

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

Проблема в том, что когда я пытаюсь отправить дополнительные данные в POST, используя CURLOPT_POSTFIELDS, эти данные не будут отправлены вместе с дайджестом информации об аутентификации. Почему это? Как это исправить?

Я использую PHP 5.4.3 с php curl 7.25.0.


person Guj Mil    schedule 18.10.2012    source источник


Ответы (1)


Нет абсолютно никаких проблем с комбинацией дайджест-аутентификации с POST запросами.

Обязательно перепроверьте, если вы предполагаете сделать:

  1. базовый POST (аналог -X POST -d 'body-content-here' с curl CLI),
  2. или multipart POST (например, -F image_file=@"foo.jpg" для загрузки данного файла).

Также я настоятельно рекомендую взаимодействовать с вашим API через инструмент командной строки curl и использовать --libcurl request.c: он запишет в этот выходной файл C удобный обзор всех параметров, используемых для выполнения запроса, а затем вам просто нужно будет скопируйте/адаптируйте их на своей стороне.

Наконец, не стесняйтесь обращаться к этому примеру кода PHP, который иллюстрирует, как выполнять такие вызовы.

person deltheil    schedule 18.10.2012
comment
У меня есть следующая структура: $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); curl_setopt($ch, CURLOPT_USERPWD, 'тест:тест'; curl_setopt($ch, CURLOPT_URL, $myUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $parameterString); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); Данные POST отправляются на сервер пустыми. - person Guj Mil; 18.10.2012
comment
Как было предложено, вы могли бы успешно выполнить тот же запрос, используя curl в командной строке? (если нет, дважды проверьте свой веб-сервис). Правильно ли установлен $parameterString? - person deltheil; 18.10.2012
comment
Проверено, при использовании дайджеста он не будет отправлять данные POST, при использовании базового он будет отправлять их правильно. Я использовал curl 7.28 для командной строки. Еще я заметил кое-что, как будто он пытался сделать 2 запроса: первый для запроса Auth, а второй для данных (но не находит), но я не уверен ни в чем из этого. - person Guj Mil; 18.10.2012
comment
Все нормально по сравнению с двумя запросами: см. как работает дайджест-аутентификация. Также я подтверждаю, что вы не должны столкнуться с какой-либо ошибкой при объединении POST и Digest: компания, в которой я работаю, предоставляет HTTP API с точно такой же конфигурацией. Наконец-то я только что проверил с помощью curl 7.28.0, и он отлично работает. Дважды проверьте свой веб-сервис и клиентский код. - person deltheil; 18.10.2012
comment
После многих тестов я обнаружил, что у cURL действительно нет проблем с POST и Digest Auth. Моя проблема заключается в файле htaccess. По какой-то причине завиток с авторизацией поста и дайджеста не работает с тщеславным URL-адресом. Любые идеи о том, как бы вы исправить это? - person Guj Mil; 23.10.2012
comment
Я предлагаю вам открыть новый конкретный вопрос по этому поводу! - person deltheil; 23.10.2012