【发布时间】:2020-02-06 01:41:22
【问题描述】:
我不确定为什么会出现这种行为?我正在尝试在我的 PHP 脚本中实现 Blockchain.com Web API。他们的documentation states 我应该使用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 未经授权
但如果我只是复制传递给 Chrome 的 file_get_contents 和 paste it into the address bar 的 URL:
https://api.blockchain.info/v2/receive?xpub=xpub123455&callback=https%3A%2F%2Fexample.com&key=12345
它返回一个有效的 JSON 数据:
为什么这两个输出不同?以及如何从file_get_contents 获得 JSON 响应?
【问题讨论】:
-
该端点可能会检查请求的用户代理,是否有任何类似于实际当前浏览器的内容 - 如果不存在,它会拒绝请求(或者可能需要额外的身份验证。)
-
这能回答你的问题吗? How do I get PHP errors to display?
-
使用 Chrome 检查器查看 HTTP 请求的内容(标头等),并使用 curl 发出类似的请求(有很多 curl 选项)。 php.net/manual/en/book.curl.php