如何使用PHP从URL获取JSON数据?我的身份验证失败了

问题描述 投票:3回答:1

这是来自美国国家气象局的JSON天气数据的公共URL。

https://forecast.weather.gov/MapClick.php?lat=39.71&lon=-104.76&FcstType=json

如果我输入此URL是浏览器的地址栏(或单击上面的链接),我会得到我想要的JSON数据。但我在PHP上的所有尝试(在我的WordPress网站上)都会导致身份验证错误。我沿着这条线尝试了各种StackOverflow建议:

$json = file_get_contents('url_here');
$obj = json_decode($json);
echo $obj->access_token;

我沿着这条线尝试了几种StackOverflow建议:

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'url_here');
$result = curl_exec($ch);
curl_close($ch);

$obj = json_decode($result);
echo $obj->access_token;

在所有情况下,我都会收到身份验证错误

拒绝访问 您无权访问“http://forecast.weather.gov/MapClick.php”?在这台服务器上。

参考编号#18.d56775c7.1554244115.21225898

错误消息停在“?”的事实在URL中让我想知道我是否需要通过一种方法传递PHP参数,而不仅仅是将它们附加到URL。

我假设我不需要身份验证信息(用户名,密码),因为NWS数据是公开的。

建议将不胜感激。

php json curl file-get-contents
1个回答
1
投票

看起来您尝试访问的网站正在等待用户代理。

不用担心,我们可以使用cURL轻松完成此操作:

<?php
    function curler ($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_USERAGENT , "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
        $output = curl_exec($ch);
        curl_close($ch);
        return json_decode($output);
    }

    var_dump (
        curler("https://forecast.weather.gov/MapClick.php?lat=39.71&lon=-104.76&FcstType=json")
    );

这将返回您在对象中期望的数据。

© www.soinside.com 2019 - 2024. All rights reserved.