2011-04-19 8 views
0

Google Gears предоставляет API геолокации, который может принимать LAC-CELLId информацию и предоставлять данные с широким интервалом. API подробно описан здесь: Geolocation API Я использую PHP. Вот код, который я написал:Проблема с отправкой объекта JSON через POST в Google Gears

<?php 
$urlstring="http://www.google.com/loc/json"; 
$ch=curl_init($urlstring); 

$cell_towers = array(); 
$row=new stdClass(); 
$row->location_area_code=3311; 
$row->mobile_network_code=71; 
$row->cell_id=32751; 
$row->mobile_country_code=404; 
$cell_towers[]=$row;  
$param = array(
     'host'=> 'localhost', 
     'version' => '1.1.0', 
     'request_address' => true, 
     'cell_towers' => $cell_towers 
    ); 

$param_json=json_encode($param);  
//echo $param_json."<br />"; 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch,CURLOPT_POSTFIELDS,urlencode($param_json)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("application/jsonrequest")); 
$result=curl_exec($ch); 
echo $result; 

>

Ответ, который я получаю «JSON синтаксического анализа ошибок.» Что я делаю неправильно?

ответ

3

Не urlencode. application/json тел никогда urlencoded.

+0

Дерьмо! Большое спасибо, это заставило меня гадить. Удаление urlencode исправлено. – citsym

0

У вас есть правильный тип приложения. Их API использует: application/json

+0

Я изменил эту строку на 'curl_setopt ($ ch, CURLOPT_HTTPHEADER, array (" Content-Type: application/json "));' По-прежнему сохраняется та же ошибка. – citsym

+0

Я предлагаю вам посмотреть на генерируемый JSON, например. оповещения ($ param_json). Предполагается, что $ cell_towers [{stuff: stuff}, {stuff: stuff}]. – Blazes

+0

[] приходит только в том случае, если у меня есть более 1 набора значений для ячеек. Если бы я изменить свой код, чтобы добавить еще один набор значений, то JSON генерируемый: '{ \t«хозяин»:«локальный», \t«версия»:«1.1.0», \t«request_address»: правда, \t "cell_towers": \t [ \t \t { \t \t \t "location_area_code": 3311, \t \t \t "mobile_network_code": 71, \t \t \t "cell_id": 32751, \t \t \t "mobile_country_code": 404 \t \t}, \t \t { \t \t \t "location_area_code": 3311, \t \t \t "mobile_network_code": 71, \t \t \t "cell_id": +32752, \t \t \t "mobile_country_code": 404 \t \t} \t ] } ' – citsym