PHP调用Google地理编码API:浏览器与file_get_contents结果不一致问题
解决Google地理编码API PHP调用返回"zero results"的问题
问题原因
Google地理编码API的地址匹配逻辑会根据请求的语言偏好调整——意大利语Chrome浏览器会自动在请求头中携带Accept-Language: it,而PHP默认请求没有这个头,英语浏览器则携带en头。不同语言下API对地址的解析规则、匹配优先级不同,导致只有意大利语环境能返回有效结果。
解决方案
方案1:直接在API请求中添加language参数
在URL里明确指定语言为意大利语,强制API按意大利语规则解析地址:
https://maps.googleapis.com/maps/api/geocode/xml?address=84100+ORANGE+FR&key=apikey&language=it
方案2:在PHP请求中设置Accept-Language请求头
如果需要动态控制语言,可以通过stream_context_create构造带有语言头的请求上下文,传给file_get_contents或simplexml_load_file:
$apiUrl = 'https://maps.googleapis.com/maps/api/geocode/xml?address=84100+ORANGE+FR&key=apikey'; // 创建带有意大利语请求头的上下文 $httpContext = stream_context_create([ 'http' => [ 'header' => 'Accept-Language: it' ] ]); // 使用simplexml_load_file调用 $xmlData = simplexml_load_file($apiUrl, null, LIBXML_NOERROR, null, false, $httpContext); // 或者使用file_get_contents $responseContent = file_get_contents($apiUrl, false, $httpContext);
以上两种方式都能让PHP请求和意大利语Chrome的请求保持一致,从而返回有效结果。
内容的提问来源于stack exchange,提问作者Uxe
相关产品推荐
相关产品推荐

