[英]PHP cURL vs 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))
除此之外,由于最近的一些网站黑客攻击,我们不得不更加保护我们的网站。 failed to work, where still would work.这样做时,我们发现无法工作,而仍然可以工作。
request.不是 100%,但我相信这个 php.ini 设置可能阻止了请求。
; 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.10 秒内返回数据
我知道这是一个老话题,但我相信这真的很重要。 而现在,与8年前相比,有很大的不同。 众所周知, Curl是第 3 部分库。
简单比较:最新版本的 Curl 库有 170 多个不同的函数,可以向 API 发送适当的请求。 8年前只有70个功能。 事实:仍在开发中。
这就是为什么我想对这个问题发表新评论。
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 对象添加更多参数和选项。 这些类型的参数完全取决于您和您尝试使用的服务。
CURL
能够处理复杂的 HTML 通信,但file_get_contents()
不能。CURL
支持 HTTP PUT、GET、POST,但file_get_contents()
支持简单的 HTTP GET 和 HTTP POST 请求。CURL
支持缓存和 cookie,但file_get_contents()
不支持缓存、cookie 等。CURL
能够使用 HTTP、HTTPS、FTP、FTPS等。 file_get_contents()
使用 HTTP 和 HTTPS 协议进行通信。CURL
可用于从服务器读取、更新和删除文件,但file_get_contents()
仅允许您读取文件。CURL
比file_get_contents()
更安全、更快CURL
比file_get_contents()
理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.