我正在从网络服务器调用Google Places Autocomplete API,因此,当客户端代码无法从浏览器捕获纬度/经度时,默认情况下,位置偏向将始终基于服务器的IP地址。我正在尝试寻找一种方法,而不是使用我的方法将客户端的IP地址传递给Google。我已经在服务器API上捕获了客户端IP,但是似乎没有任何方法可以在“自动完成”请求中转发该IP。
Google从文档中指出:
注意:如果您不提供位置和半径,则API将 尝试从其IP地址检测用户的位置,然后 将结果偏向该位置。
我试图将不同的标头添加到“自动完成请求”中,但是它们都被忽略了,并且仍然使服务器IP上的结果产生偏差。也许我没有找到正确的标题。
//pseudo C#
headers.Add("X-ProxyUser-Ip", "172.217.5.228");
headers.Add("X-Forwarded-For", "172.217.5.228");
是否存在将客户端IP从服务器转发到Google API的正确方法?
src:https://developers.google.com/places/web-service/autocomplete#location_biasing
答案 0 :(得分:0)
我认为您已经阅读过Google的官方文档,restricting自己拥有的域名的密钥不适合您。
我想您可以尝试调用第三方API粗略地将客户端IP定位到位置,并将其用于Google自动填充。
答案 1 :(得分:0)
当前,Google Places服务器端API不支持IP地址作为位置偏好设置的参数。因此,您有两个选择。
Ipfind服务示例
using (var webClient = new System.Net.WebClient()) {
string ip_address = "10.23.45.154";
string URL = "https://api.ipfind.com/?ip=" + ip_address;
var json = webClient.DownloadString(URL);
// extract ISO country code here and call Google Places API
}
组件-您要限制的位置分组 您的结果。目前,您可以使用组件最多过滤5个 国家。国家/地区必须以两个字符(ISO 3166-1)的形式传递 兼容Alpha-2的国家/地区代码。例如:components = country:fr 会将您的结果限制在法国境内。多 国家/地区必须作为多个国家/地区(XX)过滤器通过管道传递 字符(|)作为分隔符。例如: 组件=国家:美国|国家:pr |国家:vi |国家:gu |国家:mp 会将您的结果限制在美国及其 非公司化的有组织领土。