我目前有一个可用的JSON生成API,可生成https://example.com/api/user/id/0
等网址我正在寻找内部调用API的最佳方法,而无需PHP的HTTPS处理时间。
这有效:
$url = "https://example.com/api/user/id/0";
file_get_contents($url);
这不是:
$url = "/api/user/id/0";
file_get_contents($url);
或者这个:
$url = __DIR__."/api/user/id/0";
file_get_contents($url);
我目前在API中有这样的.htaccess文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)$ index.php?request=$1 [QSA,NC,L]
</IfModule>
来自apache错误日志的信息非常无益:
file_get_contents(/api/user/id/0): failed to open stream: No such file or directory in /var.....
任何建议将不胜感激。我目前每个请求使用完整的URL方法获得5秒的等待时间,即使在直接访问时在几分之一秒内显示API。这都是原生PHP,没有框架。
答案 0 :(得分:-1)
所以我对cURL做了一些研究,作为file_get_contents()
的替代方案David walsh的网站(https://davidwalsh.name/curl-download)给了我一个很好的获取功能
function get_data($url) {
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
所以我跑了这个:
echo $url ."<br>";
$fgt1 = time();
$file_get = file_get_contents($url, false);
$fgt2 = time();
$cgu1 = time();
$curl_get = get_data($url);
$cgu2 = time();
$fgt = $fgt2 - $fgt1;
$cgu = $cgu2 - $cgu1;
echo "<br>file_get_contents(): {$fgt}<br>curl: {$cgu}";
curl函数的响应几乎瞬间恢复,file_get_contents()函数在5秒后返回。我希望这可以帮助其他人在HTTPS上从JSON API中提取数据。
我现在需要调查通过curl发送不同的头方法,例如POST和DELETE,但我怀疑它会在某处。
感谢您提出的任何建议(并删除)。它有所帮助。