@ASiD

Как переделать CURL запрос под PHP?

Здравствуйте. Пытаюсь воспользоваться стандартизацией от сервиса DaData. Возможно что-то не так понял, но их библиотека, кажется, требует несколько сторонних, что нежелательно. Есть возможность передать запрос с помощью CURL. Из командной строки запрос работает, после перевода в PHP - не хочет. Подскажите, что не так?

Оригинал (работает):
curl -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Token 123" \
    -H "X-Secret: 123" \
    -d '[ "тел 7165219 доб139" ]' \
    https://dadata.ru/api/v2/clean/phone


После переделки в PHP (возвращает {"detail":"Учетные данные не были предоставлены."}1):
$ch = curl_init();
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"POST");
curl_setopt($ch, CURLOPT_HEADER, "Content-Type: application/json");
curl_setopt($ch, CURLOPT_HEADER, "Authorization: Token 123");
curl_setopt($ch, CURLOPT_HEADER, "X-Secret: 123");
curl_setopt($ch, CURLOPT_POSTFIELDS, '[ "тел 7165219 доб139" ]');
curl_setopt($ch, CURLOPT_URL, "https://dadata.ru/api/v2/clean/phone");
$result = curl_exec($ch);  
curl_close($ch);
echo $result;
  • Вопрос задан
  • 1045 просмотров
Решения вопроса 1
glebovgin
@glebovgin
Full Stack Web Developer
Добрый день.

Да, ваш код надо бы поправить:
$post  = array('key' => 'value'); // укажите данные для отправки через POST
$headers = array('Content-Type: application/json', 'Authorization: Token 123', 'X-Secret: 123');

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // отправка заголовков
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // POST-данные
curl_setopt($ch, CURLOPT_URL, 'https://dadata.ru/api/v2/clean/phone');
$result = curl_exec($ch);  
curl_close($ch);
echo $result;


Не стесняйтесь адаптировать код под свои конкретные нужды. Я просто указал вектор.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

но вообще используй www.telerik.com/fiddler
Ответ написан
Комментировать
@nalgeon
Если не умеете или не хотите работать с composer: пример вызова «Дадаты» из PHP одним файлом
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы