我正在通过第三方API构建网络应用,并且他们要求我为每次通话传递用户IP和用户代理。
我更喜欢javascript(我使用Angular)或php,因为我使用curl来处理请求。我可以为此找到第三方脚本,但仅针对用户IP而不是useragent。我希望同时减少两次通话次数。
任何人都可以帮助处理此问题的脚本或网站吗?
答案 0 :(得分:1)
在PHP中:
<?php
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$ip = $_SERVER['REMOTE_ADDR'];
?>
我真的不懂PHP,这只是谷歌搜索你的问题的结果。请先尝试做一些研究!
在JS中:
var userAgent = window.navigator.userAgent;
var req = new XMLHttpRequest();
req.onload = function() {
var ip = JSON.parse(req.response).ip;
//Use ip asynchronously here
};
req.open("GET", "https://api.ipify.org/?format=json");
req.send();
除非您滥用WebRTC中的安全漏洞或查询第三方服务,否则在JS中无法获取IP,如此处所示。了解ip
在req.onload
之外不存在非常重要,因此在请求回复之前无法使用。
如果您可以访问ES7(不太可能,但我会将其包含在内以保证完整性),您可以使用它来获取用户的IP:
(async () => {
var ip = (await fetch("https://api.ipify.org/?format=json").then(r => r.json())).ip;
//use ip
})();
哪个更短更有趣。
作为旁注,在客户端不需要获得用户的IP,因为您在JS中提出的任何请求都来自来自该客户端。这意味着接收该请求的任何服务器都能够本地查看IP,而不会出现这样的黑客攻击。
我不确定为什么第三方API会在客户端发出请求时请求您传递客户端IP - 听起来像是一个糟糕的API。
答案 1 :(得分:0)
这意味着什么?! 用户代理的每一点都表明您的系统有一些特殊之处。
没有编写用户代理字符串的“标准”方法,因此不同的Web浏览器使用不同的格式(有些格式大不相同),并且许多Web浏览器将大量信息填充到其用户代理中。这就是WhatIsMyBrowser.com介入的地方-我们解码您的用户代理字符串以弄清楚它的意思。