如何检测请求是否来自移动设备

azr*_*hel 11 mobile request detect server

在服务器端,有什么方法可以检测来自移动设备(来自移动应用程序)的特定 API 请求?我了解用户代理嗅探,但我不喜欢这种方法,因为没有足够的理由不实施它。我还知道,当来自我的移动应用程序时,我可以添加一些标记来请求,但这似乎也有点脏。实际上有什么“正确”的方法可以做到这一点吗?

我想它没有太大变化,但我的后端是在node.js 中。

问候,谢谢!汤姆

stu*_*ent 9

一般的答案是否定的。您从设备获取标头/消息。您对设备的所有了解都在标头中,并且设备可以在其中写入它想要的内容。如果您正在谈论 http 请求(由代理查找指示),您可以在此处查看标头:

您所能做的“可靠”就是寻找用户代理。就我而言,它是 Linux 上的 Mozilla Firefox。但如果我愿意的话我可以假装它。

Host: somesite.org
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://somesite.org/index.php?page=2
Cookie: rteStatus=rte; 
Cache-Control: max-age=0
Run Code Online (Sandbox Code Playgroud)

如果是某些 chromium 移动网站,也许您可​​以从引用者那里获取一些信息,或者您可以查看 Accept 和 Accept-Enconding,也许某些移动浏览器接受不同的内容。但是没有可靠的方法来确定设备,只能由其用户代理通过标头来确定。

另一种方法是查看请求是否来自称为 3G 或 4G 池的 IP。但如果请求不是通过 WLAN / WIFI 发出,这才有效。我不确定是否存在 3G/4G IP 地址池列表。


Rak*_*ari 6

您可以使用 UserAgent 字符串进行检测。下面是 C# 代码。

 public bool IsMobileDevice(HttpRequest r){
                    String userAgetnt = r.UserAgent;
                    String deviceName = "Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini";
                    return Regex.IsMatch (r.UserAgent, deviceName);
                }
Run Code Online (Sandbox Code Playgroud)