繁体   English   中英

如何将客户端的 IP 地址转发到 Google Places Autocomplete API

[英]How can I forward the client's IP Address to Google Places Autocomplete API

我正在从 Web 服务器调用 Google Places Autocomplete API,因此当客户端代码无法从浏览器捕获纬度/经度时,默认情况下位置偏差将始终基于我服务器的 IP 地址。 我试图找到一种方法将客户端的 IP 地址传递给 Google,而不是使用我的 IP 地址。 我已经在我的服务器 API 上捕获了客户端 IP,但似乎没有任何方法可以在自动完成请求中转发它。

从文档中,谷歌指出:

注意:如果您不提供位置和半径,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 的正确方法?

源代码: https : //developers.google.com/places/web-service/autocomplete#location_biasing

目前,Google Places 服务器端 API 不支持 IP 地址作为位置偏置的参数。 所以你有两个选择。

  1. 使用客户端 API(您已经提到这是不可行的)
  2. 调用反向地理定位 API 以获取 IP 的国家/地区代码。 然后通过 components 参数将此国家/地区代码传递给 Google Places API。

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 会将您的结果限制在法国境内。 多个国家/地区必须作为多个 country:XX 过滤器传递,并使用竖线字符 (|) 作为分隔符。 例如:components=country:us|country:pr|country:vi|country:gu|country:mp 会将您的结果限制在美国及其非法人组织领土内的地方。

我假设您已经阅读了 Google 官方文档,并且密钥限制在您拥有的域中并不适合您。

我想你可以尝试调用 3rd 方 API 来粗略地将客户端 IP 偏置到位置,并将其用于 Google 自动完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM