2013-07-31 276 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