【问题标题】:400 Error Using file_get_contents on public endpoint在公共端点上使用 file_get_contents 时出现 400 错误
【发布时间】:2018-10-12 00:43:36
【问题描述】:

我正在尝试访问 Coinbase API 的这个端点:

https://api.pro.coinbase.com/currencies

注意端点是公开的/未经身份验证的,API documentation 确认

$coinbase_coins = file_get_contents('https://api.pro.coinbase.com/currencies');
$coinbase_coins = json_decode($coinbase_coins, true);

以上代码抛出 400 错误。我正在拔头发试图弄清楚这一点。我可以在浏览器中很好地访问端点。我可以在不同的 API 中访问其他公共端点,所以我认为这不是服务器上的问题。

我也尝试过 cURL,但没有成功。

有人可以偶然展示一个 PHP 中的工作示例吗?谢谢!

【问题讨论】:

  • 你是在windows机器上吗?
  • 是的,我在 Windows 机器上
  • file_get_contents() 的 PHP 手册说 Windows 在处理 SSL 时可能会出现错误。它还说,当您使用 http:// 前缀时,PHP 能够检测到此问题,您确实这样做了。也许还有一些问题。只是一个想法。
  • @Joseph_J 该通知用于连接到在 Windows 上运行的 IIS 服务器,与客户端无关。这也是一个非常古老的通知。
  • 我可以确认尝试获取此文件的相同 400 响应。这是服务器端的事情。

标签: php rest endpoint


【解决方案1】:

这似乎是服务器端问题;它在没有浏览器 UA 的情况下阻止请求。你可以设置一个,它似乎工作正常。

$ctx = stream_context_create(["http"=>["user_agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:63.0) Gecko/20100101 Firefox/63.0"]]);
$coinbase_coins = file_get_contents('https://api.pro.coinbase.com/currencies', true, $ctx);
$coinbase_coins = json_decode($coinbase_coins, true);

print_r($coinbase_coins);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    相关资源
    最近更新 更多