从同一服务器

时间:2017-06-09 09:20:33

标签: php json api https

我目前有一个可用的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,没有框架。

1 个答案:

答案 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,但我怀疑它会在某处。

感谢您提出的任何建议(并删除)。它有所帮助。