2015-01-05 101 views
0

在服务器端有没有什么方法可以检测API对移动设备(来自移动应用程序)的特定请求? 我知道用户代理嗅探,但我不喜欢这个从几个足够的理由不执行它的原因。 我也知道我可以添加一些标志来请求,当它来自我的移动应用程序,但这似乎有点肮脏。 实际上是否有任何“正确”的方式来做到这一点?如何检测请求是否来自移动设备

我想它并没有太大的改变,但我的背部,并在node.js.

问候,谢谢! Tom

回答

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 

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

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

0

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