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.
  • может использоваться для чтения, обновления и удаления файлов с сервера, но позволяет только читать файл.
  • является более безопасным и быстрым, чем
  • немного сложнее понять, чем.
Другие вопросы по тегам