PHP cURL vs 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))
3 ответа:
file_get_contents()
Это простая отвертка. Отлично подходит для простых запросов GET, где заголовок, метод HTTP-запроса, тайм-аут, cookiejar, перенаправления и другие важные вещи не имеют значения.
fopen()
С контекст потока или завить с 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 и recive JSON content. Если вы правильно настроите 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 секунды максимум