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