用户IP和useragent

时间:2016-01-24 03:56:14

标签: javascript angularjs api

我正在通过第三方API构建网络应用,并且他们要求我为每次通话传递用户IP和用户代理。

我更喜欢javascript(我使用Angular)或php,因为我使用curl来处理请求。我可以为此找到第三方脚本,但仅针对用户IP而不是useragent。我希望同时减少两次通话次数。

任何人都可以帮助处理此问题的脚本或网站吗?

2 个答案:

答案 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,如此处所示。了解ipreq.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介入的地方-我们解码您的用户代理字符串以弄清楚它的意思。