0

我想使用诺基亚 Here 地图获取有关城市中某个地方的一些数据。因此我想执行一个 curRL 请求。我正在构建这样的 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

4

3 回答 3

0

我通过请求一个新的 App Id 和 App Code 来“解决”它。不知道为什么以前没有工作,但现在我没有任何重大问题。对于任何好奇。我的请求现在看起来像这样(我试图让它尽可能简单)

$getString = $this->getUrl() . $this->getAuthString() . "&at=" . $where['lat'] . "," . $where['lon'] . "&q=" . $term . "&pretty=true&size=100";

于 2013-10-30T09:13:56.697 回答
0

由于缺少上下文(您如何设置 self::APP_ID 和 self::APP_CODE?)以及缺乏 PHP 知识,我无法解决您的问题。

但它可能有助于您搜索错误消息“缺少身份验证参数”表明 curl 生成的请求缺少 app_id 或 app_code 参数或两者,而不是错误的 app_id (在当前实现中)会给出错误消息“无效的 app_id app_code 组合”。

例子:

http://places.nlp.nokia.com/places/v1/discover/search?app_code=xxxxxxx&at=51.2151915838703%2C6.76354323416523&q=Rewe&pretty=true

返回带有消息“缺少身份验证参数”的 401,而

http://places.nlp.nokia.com/places/v1/discover/search?app_id=xxxxxx&app_code=xxxxxxx&at=51.2151915838703%2C6.76354323416523&q=Rewe&pretty=true

返回带有消息“无效的 app_id app_code 组合”的 401。

于 2013-10-30T08:47:41.517 回答
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 请求,该请求有效(根据您的情况)。

于 2013-10-29T14:07:30.690 回答