首页 > 解决方案 > 无法从 PHP 中的外部 URL 获取 JSON 数据

问题描述

这是我试图获取 JSON 数据的 URL,但我无法在其他站点上获取它,它返回空白,什么也没有。

这是我用来尝试解码的代码

$url = 'http://habbolicense.epizy.com/verify?url=https://ujimaradio.com&key=05c99851c3f982a4e2fc874846308594';

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
$obj = json_decode($result);
echo 'result = '.$obj->access_token;

这是网址:http ://habbolicense.epizy.com/verify?url=https://ujimaradio.com&key=05c99851c3f982a4e2fc874846308594

谢谢你

标签: phpjsoncurldecode

解决方案


URL 使用 javascript 来生成内容,特别是{"access_token": "KeyFound"}. 这意味着客户端必须了解 javascript 才能呈现页面。这可以在完整的回复中看到:

<html>
  <body>
    <script type="text/javascript" src="/aes.js" ></script>
    <script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("7b0167f2554521ca32df18773a2853a1");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://habbolicense.epizy.com/verify?url=https://ujimaradio.com&key=05c99851c3f982a4e2fc874846308594&i=1";</script>
    <noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript>
  </body>
</html>

你不能用 cURL 做到这一点,事实上,你不能用基本的 HTTP 请求库做到这一点,这个任务需要能够执行 javascript。这可以使用无头浏览器完成,但 PHP 中的选项并不多,php-phantomjs是一个,headless-chromium-php是另一个。请注意, php-phantomjs 只是PhantomJS的包装器。如果您不限于 PHP,还有更多选择。这就是基于 javascript 的解决方案将大放异彩的地方,因为您需要的是可以执行 javascript 的东西。

这是一个无头浏览器列表,其中包含有关其功能和限制的一些信息。


推荐阅读