PHP cURL против file_get_contents

Как эти два фрагмента кода отличаются при доступе к 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))
 David Gilbertson18 июн. 2013 г., 00:36
FWIW есть небольшая разница в отношении скорости. Я только что закончил извлекать 5000 URL-адресов и сохранять их HTML-файлы (около 200 КБ на файл). Я сделал половину с curl и половину с file_get_contents в качестве эксперимента, и не было заметной разницы.
 user84913716 июн. 2012 г., 18:00
cURL способен гораздо больше, чемfile_get_contents, Этого должно быть достаточно.
 Chris Strickland29 дек. 2014 г., 21:42
Можно отправить данные поста с помощью file_get_contents, если вы используете версию, которая поддерживает потоковый контекст.

Ответы на вопрос(3)

из-за недавних взломов веб-сайтов, мы вынуждены были защищать наши сайты. При этом мы обнаружили, чтоfile_get_contents не удалось работать, гдеcurl все еще будет работать.

Не 100%, но я считаю, что эта настройка php.ini могла блокироватьfile_get_contents запрос.

; Disable allow_url_fopen for security reasons
allow_url_fopen = 0

В любом случае наш код теперь работает сcurl.

 19 нояб. 2013 г., 02:40
Да,file_get_contents требуетallow_url_fopen быть правдивым
 24 июн. 2015 г., 17:16
@vr_driver эти ссылки не имеют ничего общего сfile_get_contents()
 04 мая 2015 г., 12:42
Хостинговые компании отключаютallow_url_fopen потому что они как бы принимают это заallow_url_include. allow_url_fopen а такжеfile_get_contents хорошо в использовании.
 20 дек. 2013 г., 05:43
Да, многие хостинговые компании отключаютfile_get_contents() из-за многих подвигов, которые, как известно, используют функцию. cURL - это функция, которую люди должны использовать в коде сейчас.
 02 мар. 2014 г., 16:36
@frustratedtech Что & quot; использует & quot; эти?
Решение Вопроса

file_get_contents() простая отвертка Отлично подходит для простых запросов GET, где не имеют значения заголовок, метод HTTP-запроса, время ожидания, cookiejar, перенаправления и другие важные вещи.

fopen() сконтекст потока или свернуть сsetopt Powerdrills с каждым битом и вариант, который вы можете придумать.

 29 июл. 2015 г., 16:53
и как дополнение к комментарию @ velop, через контекст потока также можно отправлять POST, PUT, аутентификацию, заголовки, контент, прокси и многое другое с помощью одного запроса file_get_contents
 28 мар. 2018 г., 21:54
@velop: Да. И метод тоже. И перенаправляет. И тайм-аут ...php.net/manual/en/context.http.php
 03 нояб. 2013 г., 15:36
file_get_contents позволяет также установить контекст, что означает, что вы можете установить поля заголовка, как вам нравится.
 16 июн. 2012 г., 18:09
Чтобы остаться в рамках этой метафоры, обратите внимание, что cURL - это powerdrill со сложным сверлильным патроном, который требует, чтобы вы знали его достаточно хорошо, чтобы фактически изменить его (читай: установка параметров cURL немного утомительна, но позволяет делать все, что вы захотите).
 24 дек. 2015 г., 13:04
@Xeoncross, производительность мудрее, какая из них быстрее?

но в моем последнем тесте на одном из моих API cURL работает быстрее и стабильнее. Иногда file_get_contents по большему запросу требуется более 5 секунд, когда cURL требуется всего от 1,4 до 1,9 секунды, что вдвое быстрее.

Мне нужно добавить одну заметку о том, что я просто отправляю GET и получаю содержимое JSON. Если вы правильно настроите cURL, вы получите отличный ответ. Просто "скажи" чтобы отбраковать то, что вам нужно отправить, и что вам нужно получить, и это все.

На вашем экзамене я хотел бы сделать эту настройку:

$ch =  curl_init('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_TIMEOUT, 3);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
$result = curl_exec($ch);

Этот запрос вернет данные в 0,01 секунды максимум

 22 нояб. 2016 г., 03:14
0,02 мс = 20 микросекунд; Вы сказали 0,1 микросекунды, что не может быть правильным.
 17 окт. 2016 г., 02:22
0,1 микросекунды (1/1 000 милисекунд) ... Мне трудно в это поверить.
 05 авг. 2018 г., 19:14
Это почти в два раза быстрее по сравнению сfile_get_contents  Я только что сделал несколько вызовов API для подтверждения. 0,8 секунды дляfile_get_contents & Амп; 0,49 секунды дляcurl (3 вызова API)
 10 нояб. 2018 г., 22:54
Вы должны использовать свои собственные настройки. Тогда ваши запросы будут идти от 1,4-1,9 с до 0,01 с;)
 17 окт. 2016 г., 00:00
Да. У меня есть некоторые ответы в 0,02 мс, например, проверка номера телефона Twilio API. Это быстро.

Ваш ответ на вопрос