在服务器端有没有办法检测到来自移动设备的API的特定请求(来自移动应用程序)? 我知道用户代理嗅探但我不喜欢这种方法,因为没有足够的理由不实现它。 我也知道我可以添加一些标志来请求来自我的移动应用程序,但这似乎有点脏。 实际上有没有“适当的”方法呢?
我猜它没有太大变化,但我的后端是在node.js。
问候,谢谢! 汤姆
答案 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);
}