PHP cURL vs file_get_contents

Как эти два фрагмента кода отличаются при доступе к 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)) 

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

fopen() с контекстом потока или cURL с setopt – это powerdrills с каждым битом и возможностью, о которой вы можете думать.

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

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

 ; Disable allow_url_fopen for security reasons allow_url_fopen = 0 

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

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

Мне нужно добавить одну заметку, чтобы просто отправить GET и получить JSON-контент. Если вы правильно настроили cURL, у вас будет отличный ответ. Просто «скажите» 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 секунды