php - file_get_contents() 返回 FALSE,而通过 Chrome 的简单 GET 请求返回 JSON 数据
问题描述
我不确定为什么会出现这种行为?我正在尝试在我的 PHP 脚本中实现 Blockchain.com Web API。他们的文档指出我应该使用file_get_contents
PHP 函数来查询它,我这样做:
$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
?
解决方案
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);
推荐阅读
- raspberry-pi3 - 树莓派无法识别默认密码
- javascript - 如何创建一个简单的 HTML/Javascript 测验答案检查器?
- angular - Angular:在 Observable 完成之前完成测试
- azure - 无法在 azure databricks 中保存表
- python-3.x - 当嵌套在具有多个参数的条件中时,pdb 不会在 continue 语句上停止
- node.js - 回调不是函数:(
- excel - 文档锁定编辑
- c++ - 为什么ifstream读取超出eof?(即使没有打开文件)如何在 eof 处停止读取?
- r - 如何根据组向嵌套图添加额外的标题组件
- python - 根据列名计算并获取名称作为计算的一部分