4

我正在尝试通过 curl 连接从 url 获取 JSON 数据。当我打开链接时:它显示 {"version":"N/A","success":true,"status":true}。
现在,我想获得以上内容。

到目前为止,我已经使用了这个:

$loginUrl = 'http://update.protect-website.com/index.php?plugin=firewall&action=getVersion';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$loginUrl);
$result=curl_exec($ch);
curl_close($ch);
var_dump(json_decode($result));

但是,我总是得到 NULL,有人知道哪里错了吗?

4

3 回答 3

5

该网站检查用户代理。添加代理选项,它将起作用。

$loginUrl = 'http://update.protect-website.com/index.php?plugin=firewall&action=getVersion';
$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$loginUrl);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
$result=curl_exec($ch);
curl_close($ch);
var_dump(json_decode($result));
于 2013-07-31T01:23:16.460 回答
1

你得到 NULL 因为json_decode无法解析返回的字符串。

从文档:

返回值: ... 如果无法解码 json 或编码数据深度超过递归限制,则返回 NULL。

尝试转储 $result 变量以查看它的外观。可能 CURLOPT_HEADER=true,在这种情况下,标头会使响应无效 JSON。

编辑:检查您的 API 端点后,它似乎是有效的 JSON。虽然这与您的具体问题无关,但您应该设置 Content-Type: application/json 标头。

于 2013-07-31T01:21:18.303 回答
-1
curl_setopt($ch, CURLOPT_HEADER, 0);
于 2017-01-06T17:14:36.060 回答