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

问题描述 投票:3回答:2

我正在从网络服务器调用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的正确方法?

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

c# asp.net google-api google-places-api
2个回答
0
投票
我认为您已经阅读过Google的正式文档,并且restricting您拥有的域的密钥不适合您。

我想您可以尝试调用第三方API来大致将客户端IP定位到位置,然后将其用于Google自动填充。


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

    使用客户端API(您已经提到这是不可行的)
  1. 调用反向地理位置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 }

    components

    -您要限制到的位置分组您的结果。目前,您可以使用组件最多过滤5个国家。国家/地区必须以两个字符(ISO 3166-1)的形式传递兼容Alpha-2的国家/地区代码。例如:components = country:fr会将您的结果限制在法国境内。多国家/地区必须作为多个国家/地区(XX)过滤器通过管道传递字符(|)作为分隔符。例如:组件=国家:美国|国家:pr |国家:vi |国家:gu |国家:mp会将您的结果限制在美国及其非法人有组织的领土。
  • © www.soinside.com 2019 - 2024. All rights reserved.