2013-07-31 242 views
4

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

到目前为止,我有使用此:

$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,是否有人有想法是哪里不对?

+0

此链接http://update.protect-website.com/?plugin=firewall&action=getVersion/显示一个WordPress页面:-) –

+0

@MadraDavid笑,遗憾的错误,纠正它 –

回答

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)); 
+3

为什么要添加代理选项? –

1

由于json_decode无法解析返回的字符串,因此您将获得NULL值。

从文档:

返回值: ......如果JSON不能被解码 或者如果编码数据大于 递归限制较深,返回NULL。

尝试转储$ result变量,而不是看看它是什么样子。可能CURLOPT_HEADER = true,在这种情况下,标题会使响应无效JSON。

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

-1
curl_setopt($ch, CURLOPT_HEADER, 0); 
+3

添加底层原因,为什么要设置这个选项,会让其他用户更好地理解你的答案 – tuxtitlan