First of all cURL has a lot of options to set. You can really set any option you need to - many supported protocols, file-uploads, cookies, proxies and more.
file_get_contents()
really just GETs or POSTs the file and has the result.
However: I tried some APIs and did some "benchmarking":
cURL was a lot faster than file_get_contents
Just try it with your terminal: time php curl.php
curl.php:
<?php
$ch = curl_init();
$options = [
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => 'http://api.local/all'
];
curl_setopt_array($ch, $options);
$data = json_decode(curl_exec($ch));
curl_close($ch);
fgc.php
<?php
$data = json_decode(file_get_contents('http://api.local/all'));
Averaged cURL was 3-10 times faster than file_get_contents
in my case. The api.local responeded with a cached JSON file - about 600kb.
I don't think it was coincidence - But that you can't measure this accurately, because the network and the response times differ a lot, based on their current load / network speed / response times etc. (local networks won't change the effect - there will be load & traffic too)
But for certain use cases, it could also be that file_get_contents
is actually quicker.
So I built a simple function: https://git.io/J6s9e