解码“https” php 数组中的 json 数组

我有以下 https:// url 其中包含 json 数组´


https://us.api.blizzard.com/data/wow/mount/6?namespace=static-us&locale=en_US&access_token=USgdNPkRDwpJ1m4zQ2mHokA0O12E0kPTih

我想在 php 数组中解码这个 json 数组。


为此我用过


$jsondata = file_get_contents('https://us.api.blizzard.com/data/wow/mount/6?namespace=static-us&locale=en_US&access_token=USgdNPkRDwpJ1m4zQ2mHokA0O12E0kPTih');


$data = json_decode($jsondata, true);

我尝试了很多解决方案,因为似乎已知file_get_contents无法读取 https 网址。


你能帮我吗,我怎样才能在 php 中解码这个 json 数组,这样我就可以继续使用它,就像它是一个“正常”数组一样。 PHP数组?


我也尝试了这个curl解决方案但没有成功:


$url="https://us.api.blizzard.com/data/wow/achievement/6?namespace=static-us&locale=en_US&access_token=USgdNPkRDwpJ1m4zQ2mHokA0O12E0kPTih";    

  

function getSslPage($url) {

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

    curl_setopt($ch, CURLOPT_HEADER, false);

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_REFERER, $url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

    $result = curl_exec($ch);

    curl_close($ch);

    return $result;

}


慕少森
浏览 97回答 1
1回答

UYOU

原因是 API 提供商正在阻止 CLI 类型的用户代理,这很可能是为了防止机器人和此类事件。如果您将用户代理设置为使用 cURL 模拟允许的浏览器,则它可以完美运行:function getSslPage($url, $userAgent) {    $ch = curl_init($url);    curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    curl_setopt($ch, CURLOPT_HEADER, false);    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);    curl_setopt($ch, CURLOPT_URL, $url);    curl_setopt($ch, CURLOPT_REFERER, $url);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);    $result = curl_exec($ch);    curl_close($ch);    return json_decode($result, true);}$userAgent = 'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0'; $url = "https://us.api.blizzard.com/data/wow/achievement/6?namespace=static-us&locale=en_US&access_token=USgdNPkRDwpJ1m4zQ2mHokA0O12E0kPTih";    $data = getSslPage($url, $userAgent);print_r($data);
打开App,查看更多内容
随时随地看视频慕课网APP