【问题标题】:Trouble with Sending JSON object over POST to Google Gears通过 POST 向 Google Gears 发送 JSON 对象的问题
【发布时间】:2011-04-19 11:31:09
【问题描述】:

Google Gears 提供了一个地理定位 API,可以获取 LAC-CELLId 信息并提供经纬度数据。 API 在这里详述:Geolocation API 我正在使用 PHP。这是我写的代码:

<?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 解析错误”。 我做错了什么?

【问题讨论】:

    标签: php google-maps curl google-gears


    【解决方案1】:

    不要进行urlencode。 application/json 主体从不 urlencoded。

    【讨论】:

    • 该死!非常感谢,这让我发疯了。删除 urlencode 修复了它。
    【解决方案2】:

    您确定您拥有正确的应用程序类型。他们的 API 使用:application/json

    【讨论】:

    • 我将该行更改为curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json")); 仍然存在相同的错误。
    • 我建议您查看正在生成的 JSON,例如警报($param_json)。 $cell_towers 应该是 [{stuff:stuff},{stuff:stuff}]。
    • 只有当我有一组以上的手机信号塔值时,[] 才会出现。如果我修改我的代码以添加另一组值,那么生成的 JSON 是:{ "host":"localhost", "version":"1.1.0", "request_address":true, "cell_towers": [ { "location_area_code":3311, "mobile_network_code":71, "cell_id":32751, "mobile_country_code":404 }, { "location_area_code":3311, "mobile_network_code":71, "cell_id":32752, "mobile_country_code":404 } ] }
    • 好的。 Stackoverflow 使代码变得非常不可读。所以,这里是 pastebin 链接:link
    猜你喜欢
    • 1970-01-01
    • 2014-05-20
    • 2011-10-02
    • 2022-01-09
    • 1970-01-01
    • 2013-11-08
    • 2015-10-09
    • 2018-10-15
    • 1970-01-01
    相关资源
    最近更新 更多