2013-04-22 67 views
1

我想从诺基亚这里获取企业信息location api。以下是我的代码:诺基亚这里的位置api不能在php

$NokiaPlaceURL = 'http://places.nlp.nokia.com/places/v1/discover/search?app_id='.APP_ID.'&app_code='.APP_CODE.'&at='.$at.'&q='.$keyword.'&size=10'; 
     //echo $NokiaPlaceURL; exit; 
     $NokiaPlaceURL = file_get_contents($NokiaPlaceURL); 
     var_dump($NokiaPlaceURL);exit; 

它给出了以下错误。我该如何解决这个问题?

Warning: file_get_contents(http://places.nlp.nokia.com/places/v1/discover/search?app_id=---&app_code=---&at=40.708322%2C-74.008881&q=food&size=10) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 406 Not Acceptable in /opt/lampp/htdocs/test/nokia_here.php on line 29 
bool(false) 

感谢

回答

1

你需要设置一些HTTP头为您的要求。从API文档中可以看出,您需要将Accept设置为application/json(以JSON编码的数据)或application/xhtml+xml(对于XML数据)。标头被标记为可选,但是,我怀疑PHP设置了自己的标头,其中包括Accept,它没有诺基亚API的预期价值。

但是,至于如何通过file_get_contents将头添加到GET请求中,那么您可以使用流上下文。例如:

$Options = array(
    'http' => array(
     'method' => 'GET', 
     'header' => 'Accept: application/json' 
    ) 
); 

$Context = stream_context_create($Options); 
$File = file_get_contents($URL, false, $Context); 
+0

HTTP标头的最终列表可以在[地方API文档]中找到(http://developer.here.com/docs/places/topics/http-request-headers.html)相关报价如下(重点是我的): _指定'application/json'产生json响应,而 'xhtml + xml'或等效(可能的通配符)导致类似于json的 HTML._ * *任何其他值将提示406响应。** – 2013-04-23 07:16:28

+0

是的,我想链接,但与所有框架最接近的直接链接,不失去导航是开始部分。 – pilsetnieks 2013-04-23 10:57:37