我想通过诺基亚这里的地图获取一些城市中某个地方的数据。因此,我想执行一个cuRL请求。我正在构建cURL请求:
$postFields = array ( "app_id" => self::APP_ID, "app_code" => self::APP_CODE, "at" => $latLon['lat'] . "," .$latLon['lon'], "q" => $term, "pretty" => "true");
$this->_curl->setUrl ( $this->getUrl() );
$this->_curl->setPostField ( $postFields );
$curlResults = $this->_curl->execute();
var_dump ( $curlResults );
但是当我在浏览器中执行此操作时,我得到了
"{"status":401,"message":"Missing authentication parameters"}"
然而,当我打印出整个东西时。就像使用
构建查询一样 echo $this->getUrl() . "?app_id=" . self::APP_ID, "&app_code=" . self::APP_CODE . "&at=" . $latLon['lat'] . "," .$latLon['lon'] . "&q=" . $term . "&pretty=" . "true";
它没有任何问题。为什么诺基亚告诉我我缺少认证参数?
这里是查询字符串
http://places.nlp.nokia.com/places/v1/discover/search?app_id=XXXXXXX&app_code=XXXXXXX&at=51.2151915838703%2C6.76354323416523&q=Rewe&pretty=true
答案 0 :(得分:0)
由于您没有提供自行测试的方法,我认为他们不支持$_POST
,这就是您正在做的事情。
尝试以下方法:
$postFields = array ( "app_id" => self::APP_ID, "app_code" => self::APP_CODE, "at" => $latLon['lat'] . "," .$latLon['lon'], "q" => $term, "pretty" => "true");
$this->_curl->setUrl ( $this->getUrl() . '?' . http_build_query( $postFields ) );
//$this->_curl->setPostField ( $postFields );
$curlResults = $this->_curl->execute();
var_dump ( $curlResults );
这将执行GET请求,该请求有效(根据您)。
答案 1 :(得分:0)
由于缺少上下文(你如何设置self :: APP_ID和self :: APP_CODE?)和缺乏PHP知识,我无法解决你的问题。
但它可能有助于您的搜索错误消息“Missing authentication params”表示curl生成的请求缺少app_id或app_code参数或两者,而不是错误的app_id(在当前实现中)将给出错误消息“无效的app_id app_code组合”。
示例:
返回401,消息“缺少认证参数”,而
返回401,其中包含“app_id app_code组合无效”消息。
答案 2 :(得分:0)
我通过仅申请新的应用ID和应用代码来“解决”它。不知道为什么以前没有用,但现在我没有任何重大问题。对于任何好奇。我的请求现在看起来像这样(我尽量让它尽可能简单)
$getString = $this->getUrl() . $this->getAuthString() . "&at=" . $where['lat'] . "," . $where['lon'] . "&q=" . $term . "&pretty=true&size=100";