2013-07-31 3 views
4

Я пытаюсь получить данные JSON от url через соединение curl. Когда я открываю ссылку: она показывает {"version": "N/A", "success": true, "status": true}.
Теперь я хочу получить содержимое.получить данные JSON с url через curl

До сих пор я использовать это:

$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

Вы получаете NULL, потому что json_decode не может проанализировать возвращенную строку.

Из документов:

Возвращаемые значения: ... NULL возвращается, если JSON не могут быть расшифрованы или если кодированные данные глубже, чем предел рекурсии.

Попробуйте сбросить переменную $ result, чтобы посмотреть, как она выглядит. Возможно, CURLOPT_HEADER = true, и в этом случае заголовки сделают ответ недействительным JSON.

Редактировать: После проверки конечной точки API она кажется действительной JSON. Хотя это не связано с вашим конкретным вопросом, вы должны установить заголовок Content-Type: application/json.

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

Добавление основной причины, почему установить эту опцию, позволит другим пользователям лучше понять ваш ответ – tuxtitlan

Смежные вопросы