【问题标题】:PHP can't get json from local page, only remote urlPHP 无法从本地页面获取 json,只能获取远程 url
【发布时间】:2017-10-22 02:37:38
【问题描述】:

我目前正在使用 Slim 框架构建一个站点。我在我的网站上有一个端点设置,它正在工作,但是当尝试使用 PHP file_get_contents()json_decode() 获取它时,没有返回任何内容。当我运行相同的代码但将 url 更改为远程公共 API 时,json 被解码并输出到页面。

工作代码

$url = "https://jsonplaceholder.typicode.com/users";
$contents = file_get_contents($url); 
$results = json_decode($contents); // Returns JSON array

不适用于本地站点

$url = "https://local/api/endpoint";
$contents = file_get_contents($url); 
$results = json_decode($contents); // Returns NULL

关于可能导致此问题的任何想法?可能是标题?

【问题讨论】:

  • 当您将 - local/api/endpoint 输入浏览器时 - 您会看到什么?
  • local/api/endpoint 给我一个 404 但如果我通过 HTTPS 路由它,它会给我预期的 json。 https 是否与它有关,因为 PHP 只是发送 http 代替?
  • HTTPS 已从我的问题中的 url 文本中删除。在回答您的问题时,是的,这需要检查吗?
  • @TimBrownlaw 没有意义,因为当我定义 URL 时它通过 HTTPS。
  • 嗯,是的...根据您问题中的代码,您正在使用HTTPS。你还有什么不一样的?

标签: php json slim slim-3


【解决方案1】:

您的本地端点失败,因为 php 无法验证 SSL 证书,如果您使用的是自签名证书。在本地开发中,您可以通过修改默认流上下文来规避 SSL CA 检查:

$stream_opts = [
    "ssl" => [
        "verify_peer"=>false,
        "verify_peer_name"=>false,
    ]
];  
$response = file_get_contents("https://local/api/endpoint",
           false, stream_context_create($stream_opts));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2011-12-02
    • 2017-02-02
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    相关资源
    最近更新 更多