PHP cURL vs файл получить содержимое

как эти две части кода отличаются при доступе к API REST?

$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 second max