区分http移动浏览器和移动应用请求

Posted

技术标签:

【中文标题】区分http移动浏览器和移动应用请求【英文标题】:Distinguish between http mobile browser and mobile app request 【发布时间】:2014-08-06 09:02:48 【问题描述】:

我读了一些帖子,如this、this 和其他一些没有回应的帖子。不过似乎我找到了here ios 设备的解决方案。

我需要拒绝来自任何设备的任何应用程序的任何 http 请求,并且只处理来自网络浏览器的请求,所以主要的问题是:

是否有明确的方法来判断 HTTP 请求是来自移动应用程序还是来自 Web 浏览器?

谢谢

示例:我从手机/平板电脑接收所有 http 请求(我正在开发 wifi 热点后面的应用程序),所以我处理来自 Facebook 应用程序、Whatsup 应用程序和浏览器的请求。我必须拒绝来自 Facebook 和 Whatsup 的请求,只处理来自浏览器的请求。应用程序用户代理似乎与本机设备浏览器相同。

【问题讨论】:

不,没有确定的方法,因为应用可以为用户代理伪造任何价值。 【参考方案1】:

你可以做一件事。从应用程序端设置自定义用户代理。

您可以在 web 服务调用请求期间在 android 和 iphone 中设置自定义用户代理。

适用于安卓

DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "android");

适用于 iPhone

NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] 
                                       initWithURL:[NSURL URLWithString:[yourURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
NSString *userAgent = "iphone";
[urlRequest setValue:userAgent forHTTPHeaderField:@"User-Agent"];

如果用户代理是“android”或“iphone”来自应用程序,则检查请求标头,否则来自浏览器。

【讨论】:

感谢 Biraj,但我需要将所有应用程序(如 facebook 应用程序、whatsup 等)请求与浏览器请求区分开来。【参考方案2】:

您可以在请求标头中检查用户代理, 我记得移动浏览器为用户代理发送不同的值,而桌面浏览器发送不同的值。 只需调试用户代理标头并根据值进行验证。

【讨论】:

感谢 Eric,App 的 User-Agent 似乎和原生浏览器设备一样。

以上是关于区分http移动浏览器和移动应用请求的主要内容,如果未能解决你的问题,请参考以下文章

基于 http 请求在 Web 应用程序中检测移动浏览器的标准方法

js 区分浏览器来源是PC端还是移动端

使用移动浏览器请求自定义帖子类型时出现 Wordpress REST API 404 错误

Ionic - $http 在移动设备中工作,但在浏览器中显示 CORS 和预检错误

当请求来自浏览器或在请求来自移动设备时发送JSON字典时呈现HTML

我如何检测请求是不是来自我的 asp.net MVC 3 中的移动浏览器