curl запрос от API с php - PullRequest
       4

curl запрос от API с php

0 голосов
/ 04 мая 2018

Мне нужно получить данные из API, используя curl в PHP, но у меня нет опыта работы с этим?

Я уже некоторое время использую PHP (начальный / средний уровень), но я не знаю, как использовать команду curl или как сделать эту версию PHP.

Все, что я знаю об API, - это получить список всех книг, которые я могу использовать:

curl --request GET \
--url 'http://example.com/{identifier}'

с использованием "main" в качестве {identifier}

Это должно дать мне список всех книг, и тогда я смогу использовать

curl --request GET \
--url 'http://example.com/feed/{identifier}'

для получения (мета) данных о книгах (название, автор, описание, год, обложка)

Я пытался использовать $curl = curl_init("http://example.com/feed/main");, а затем curl_setopt_array($curl, array() для получения данных, но я получаю «ПРЕДУПРЕЖДЕНИЕ curl_init () было отключено по соображениям безопасности» ошибка.

Я полностью потерян и начинаю с нуля эти вызовы API / curl ...

Надеюсь, кто-нибудь сможет мне это объяснить?

(с использованием Xampp в Windows)

Ответы [ 4 ]

0 голосов
/ 04 мая 2018

(есть много похожих вопросов по StackOverflow, но качество ответов не очень хорошо для всех, на которые я смотрел - следовательно, не помечая это как дубликат)

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

Я полностью потерян и начинаю с нуля эти вызовы API / curl ...

Здесь есть 2 проблемы - ваше понимание того, как это должно работать, и сообщение об ошибке, препятствующее запуску вашего кода. Если мы беспокоимся о последнем, то, по крайней мере, вы сможете решить первое самостоятельно.

ПРЕДУПРЕЖДЕНИЕ curl_init () отключено по соображениям безопасности

Это сообщение указывает, что либо safe_mode включен, либо curl_init включен в список отключенных функций в вашем PHP.ini.

Если вы не знаете, где находится ваш файл php.ini - проверьте вывод

<?php phpinfo();

Обратите внимание, что некоторые настройки ini могут быть переопределены в другом месте - например, в файлах Apache httpd.config или .htaccess, но не в этих.

Если вы не можете получить доступ к INI-файлу, или вы можете проверить настройки, используя:

 <?php
   print ini_get('disable_functions') 
   . "<br>" . ini_get('disable_classes')
   . "<br>" . init_get('safe_mode');

В случае curl_init нас действительно интересует только первый из них. Но, как указано выше - если мы говорим о хосте, над которым у вас нет полного контроля, то это может быть ограничением вашего хостинг-пакета.

IIRC, запись в disable_functions замаскирует отсутствующее расширение - так что вы можете удалить запись из php.ini и начать видеть неопределенные ошибки функций. В этом случае вам нужно установить расширение, как описано здесь другими (но соответствующее имя файла php_curl.so в системах Unix / Linux), не забывая перезапускать httpd / php-fpm в зависимости от ситуации.

Теперь вы можете вызывать функцию. Это не значит, что ваш хост сможет:

  • разрешить имя хоста в URL
  • установить соединение http / https

Но вы увидите разные ошибки.

0 голосов
/ 04 мая 2018

Сначала включите curl для вашего xamp. Для этого выполните шаги
1. Перейдите в C: \ Program Files \ xampp \ php \ php.ini
2. Снимите точку с запятой со следующей строки в файле php.ini.
;extension=php_curl.dll до extension=php_curl.dll
3. Перезагрузите сервер apache.

Тогда пользователь thr curl как

$url= "http://example.com/feed/main";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_ENCODING, ""); // this will handle gzip content
$result = curl_exec($ch);
curl_close($ch);
print $result;
0 голосов
/ 04 мая 2018

Если вы просто делаете GET для извлечения данных, тогда вы можете использовать file_get_contents() ЕСЛИ оболочки fopen() http / https не были отключены. Смотри http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

Если вам нужно установить токен авторизации в заголовке, сначала определить cookie и т. Д., Затем вам нужно будет установить / создать context сначала - http://php.net/manual/en/function.stream-context-create.php

К сожалению, file_get_contents() работает только для GET запросов. Если вам в конечном итоге понадобится POST, PUT или DELETE, тогда вам нужно будет заставить curl работать для вашей установки PHP, или, возможно, использовать системные curl и exec() или аналогичные , Хотя если curl отключен по соображениям безопасности, я сомневаюсь, что вы можете использовать exec() и друзей.

0 голосов
/ 04 мая 2018
  1. Найдите файл PHP.ini (обычно находится в папке / bin вашей установки Apache , например.
  2. Откройте PHP.ini в текстовом редакторе
  3. Найдите или найдите следующее: ;extension=php_curl.dll
  4. Раскомментируйте это, удалив точку с запятой ; перед ней
  5. Сохранить и закрыть PHP.ini
  6. Перезагрузите веб-сервер (например, Apache или Nginx )

Вы можете проверить, включен ли cURL, используя этот пример кода:

<?php
// Test if cURL is enabled
echo 'Curl: ', function_exists('curl_version') ? 'Enabled' . "\xA" : 'Disabled' . "\xA";
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...