c# - 如何将客户端的 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
解决方案
目前,Google Places 服务器端 API 不支持将 IP 地址作为位置偏差的参数。所以你有两个选择。
- 使用客户端 API(你提到这是不可行的)
- 调用反向地理定位 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 会将您的结果限制在美国及其未合并的有组织领土内的地方。
推荐阅读
- bash - 在 shell 脚本中将 ftp 更改为 sftp
- javascript - DatGui & Three.js 不合作
- linux - 退出后任务从cgroup中移除
- flutter - Flutter:在 null 上调用了 getter 'languageCode'
- html - 背景图像在使用 CSS 的 Div 中无法正确显示
- python - tensorflow - 如何选择数组中除索引序列之外的所有元素?
- python - Python中的嵌套“任何”和“全部”条件
- html - Flex 布局和响应式设计面板
- azure - 登录Azure存储帐户的详细信息?
- r - 使用 lapply 时列名消失