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))
4 ответа
file_get_contents()
простая отвертка Отлично подходит для простых запросов GET, где не имеют значения заголовок, метод HTTP-запроса, таймаут, cookiejar, перенаправления и другие важные вещи.
fopen()
с потоковым контекстом или cURL с setopt являются powerdrills с каждым битом и опцией, которую вы можете придумать.
В дополнение к этому, из-за недавних взломов веб-сайтов, мы вынуждены были защищать наши сайты. При этом мы обнаружили, что file_get_contents не работает, где curl по- прежнему будет работать.
Не 100%, но я считаю, что этот параметр php.ini мог блокировать запрос file_get_contents.
; Disable allow_url_fopen for security reasons
allow_url_fopen = 0
В любом случае наш код теперь работает с curl.
Это старая тема, но в моем последнем тесте на одном из моих 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 секунды максимум
Я знаю, что это старая тема, но я считаю, что это действительно важно. И сейчас, есть много отличий более чем 8 лет назад. Как мы все знаем, Curl — это третья часть библиотеки.
Простое сравнение: последняя версия библиотеки Curl имеет более 170 различных функций, позволяющих отправлять правильный запрос в API. 8 лет назад было всего 70 функций. Факт: все еще в разработке.
Вот почему я хотел поставить новый комментарий к этому вопросу.
Что такое file_get_contents()
file_get_contents() — это функция файловой системы в PHP, с помощью которой вы можете считывать содержимое из файла и выполнять запросы с использованием методов GET и POST. Вы можете добавить параметры к своему запросу, используя функцию file_get_contents(). Вы можете увидеть образец ниже.
$data = http_build_query(
array(
'user_id' => '558673',
'user_name' => 'John Doe'
)
);
$config = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded',
'content' => $data
)
);
$context = stream_context_create($config);
$result = file_get_contents('https://google.com', false, $context);
Что такое завиток()
Curl — сторонняя библиотека с открытым исходным кодом. Вы можете получить доступ к репозиторию git отсюда . Эта функция « имитирует » HTTP-запросы и ответы. Эта симуляция позволяет обрабатывать асинхронные HTTP-запросы и сложные передачи данных. Кроме того, Curl подходит для выполнения междоменных FTP-запросов. Его можно использовать в различных приложениях, таких как сканирование данных с веб-сайта и настройка прокси.
Давайте проверим синтаксис запроса CURL.
$url = API_ENDPOINT."/get_movies";
$curl = curl_init();
$params = array(
'category' => $category,
'limit' => $limit,
'start' => $start,
'order' => $order,
'term' => $term
);
$params_string = http_build_query($params);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$data = curl_exec($curl);
curl_close($curl);
echo json_decode($data,TRUE); //service returns json in this sample
Примечание. Это базовый пример запроса на завивание. Вы можете добавить дополнительные параметры и параметры к объекту curl, используя его функции, такие как CURLOPT_HTTPHEADER, CURLOPT_SSL_VERIFYPEER. Все эти параметры зависят от вас и службы, которую вы пытаетесь использовать.
CURL против file_get_contents()
- может обрабатывать сложные HTML-коммуникации, но не может.
- поддерживает HTTP PUT, GET, POST, но поддерживает простые запросы HTTP GET и HTTP POST.
- поддерживает кэширование и файлы cookie, но не поддерживает кэширование, файлы cookie и т. д.
- может использовать HTTP, HTTPS, FTP, FTPS и многое другое . использует для связи протоколы HTTP и HTTPS.
- может использоваться для чтения, обновления и удаления файлов с сервера, но позволяет только читать файл.
- является более безопасным и быстрым, чем
-
немного сложнее понять, чем .