首页 > 解决方案 > 如何将客户端的 IP 地址转发到 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

标签: c#asp.netgoogle-apigoogle-places-api

解决方案


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


推荐阅读