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

时间:2015-01-05 21:57:41

标签: mobile request server detect

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

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

问候,谢谢! 汤姆

2 个答案:

答案 0 :(得分:1)

一般的答案是否定的。您从设备获得标头/消息。您对设备的所有了解都在标题中,设备可以在其中编写所需内容。如果您正在讨论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

也许你可以从引用者那里得到一些信息,如果它是一些铬移动网站,或者你可以看看Accept和Accept-Enconding,也许一些移动浏览器接受不同的东西。但是没有可靠的方法来确定设备,而是由用户代理通过标头确定。

另一种方法是查看请求是否来自称为3G或4G池的IP。但是,如果请求不是通过WLAN / WIFI进行的话,这将会起作用。我不确定是否存在3G / 4G IP地址池列表。

答案 1 :(得分:1)

您可以使用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);
                }