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

时间:2019-06-14 19:39:14

标签: c# asp.net google-api google-places-api

我正在从网络服务器调用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

2 个答案:

答案 0 :(得分:0)

我认为您已经阅读过Google的官方文档,restricting自己拥有的域名的密钥不适合您。

我想您可以尝试调用第三方API粗略地将客户端IP定位到位置,并将其用于Google自动填充。

答案 1 :(得分:0)

当前,Google Places服务器端API不支持IP地址作为位置偏好设置的参数。因此,您有两个选择。

  1. 使用客户端API(您已经提到这是不可行的)
  2. 调用反向地理位置API以获取IP的国家/地区代码。 然后通过组件参数将此国家/地区代码传递给Google place 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)过滤器通过管道传递   字符(|)作为分隔符。例如:   组件=国家:美国|国家:pr |国家:vi |国家:gu |国家:mp   会将您的结果限制在美国及其   非公司化的有组织领土。