首页 > 解决方案 > file_get_contents() 返回 FALSE,而通过 Chrome 的简单 GET 请求返回 JSON 数据

问题描述

我不确定为什么会出现这种行为?我正在尝试在我的 PHP 脚本中实现 Blockchain.com Web API。他们的文档指出我应该使用file_get_contentsPHP 函数来查询它,我这样做:

$xpub = "xpub123455";
$callback_url = "https://example.com";
$APIKey = "12345";
$url = "https://api.blockchain.info/v2/receive?xpub=".urlencode($xpub).'&callback='.urlencode($callback_url).'&key='.urlencode($APIKey);
//echo("URL: ".htmlentities($url)."<br><br>");
$res = @file_get_contents($url);
if($res)
{
    echo("RES: ".htmlentities(var_export($res, true)));
}
else
{
    $err = error_get_last();
    echo("err: ".($err && isset($err['message']) ? $err['message'] : "-"));
}

在这种情况下file_get_contents返回false,如果我再调用error_get_last,我会收到以下错误:

错误:file_get_contents(-url-):打开流失败:HTTP 请求失败!HTTP/1.1 401 未经授权

但是,如果我只是复制要传递的 URLfile_get_contents并将其粘贴到Chrome 的地址栏中:

https://api.blockchain.info/v2/receive?xpub=xpub123455&callback=https%3A%2F%2Fexample.com&key=12345

它返回一个有效的 JSON 数据:

在此处输入图像描述

为什么这两个输出不同?我怎样才能得到 JSON 响应file_get_contents

标签: phpblockchain.info-api

解决方案


allow_url_fopen 函数可能受到限制。

最好使用 cURL 而不是 file_get_contents:

function url_get_contents ($Url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $Url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

那么你可以使用这个功能:

$res = @url_get_contents($url);

推荐阅读