Чем отличаются эти два фрагмента кода при доступе к REST API?
$result = file_get_contents('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');
и
$ch = curl_init('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
Оба дают одинаковый результат, судя по
print_r(json_decode($result))
php
curl
file-get-contents
Сальвадор Дали
источник
источник
cURL
способен на большее, чемfile_get_contents
. Этого должно быть достаточно.Ответы:
file_get_contents()
простая отвертка. Отлично подходит для простых запросов GET, где заголовок, метод HTTP-запроса, тайм-аут, cookiejar, перенаправления и другие важные вещи не имеют значения.fopen()
с контекстом потока или cURL с setopt - это мощные сверла с каждым битом и опцией, о которых вы можете подумать.источник
file_get_contents
позволяет также установить контекст, что означает, что вы можете установить поля заголовка по своему усмотрению.Вдобавок к этому из-за недавних взломов веб-сайтов нам пришлось больше защищать наши сайты. При этом мы обнаружили, что file_get_contents не работает, тогда как curl все еще будет работать.
Не на 100%, но я считаю, что этот параметр php.ini мог блокировать запрос file_get_contents .
В любом случае наш код теперь работает с curl .
источник
file_get_contents
требуетallow_url_fopen
правды.file_get_contents()
из-за множества эксплойтов, которые, как известно, используют эту функцию. cURL - это функция, которую люди теперь должны использовать в коде.allow_url_fopen
потому что ошибочно принимают его заallow_url_include
.allow_url_fopen
иfile_get_contents
их можно использовать.file_get_contents()
Это старая тема, но в моем последнем тесте на одном моем API cURL был быстрее и стабильнее. Иногда file_get_contents для большего запроса требуется более 5 секунд, тогда как cURL требуется всего от 1,4 до 1,9 секунды, что вдвое быстрее.
Мне нужно добавить одно примечание по этому поводу, что я просто отправляю GET и получаю содержимое JSON. Если вы правильно настроите cURL, у вас будет отличный ответ. Просто «скажите» cURL, что вам нужно отправить и что вам нужно получить, и все.
На вашем экзамене я хотел бы сделать такую настройку:
Этот запрос вернет данные за 0,01 секунды максимум.
источник
file_get_contents
я сделал несколько вызовов API для подтверждения. 0,8 секунды дляfile_get_contents
& 0,49 секунды дляcurl
(3 вызова API)