非手机用户跳转到web页面,自动转向
程序员文章站
2023-12-26 20:04:15
...
不知道处理wap访问时,通常用什么方法来辨别手机访问或者模拟器访问?
仅通过http头可以辨别吗,下面是处理访问时,http头的各参数值情况。
在第一种情况中(手机访问),不太明白这个 ‘X-Forwarded-For 10.13.10.126’ 和 ‘X-Source-ID 211.136.72.249’这两个参数值的实际意义,google了一下,也没查出个所以然。是否包含这些参数即代表是手机访问呢?
在第二中情况中(模拟器访问),user-agent是模拟器的型号,是否取不到user-agent值即代表手机访问呢?
不知道大家是否有遇到类似的需要区分不同类型访问的问题
(1)手机访问的情况:
accept text/html, application/xhtml+xml, application/vnd.wap.xhtml+xml, application/vnd.wap.wmlscriptc, application/vnd.wap.wmlc, text/vnd.wap.wml, */*, text/x-vcard, text/x-vcalendar, image/gif, image/vnd.wap.wbmp
accept-charset UTF-8, ISO-8859-1, *
connection Keep-Alive
bearer-indication 11
Via WTP/1.1 BJBJ-PS-WAP2-GW09.bj2.monternet.com (Nokia WAP Gateway 4.0/CD3/4.0.04)
X-Forwarded-For 10.13.10.126
X-Source-ID 211.136.72.249
X-Nokia-CONNECTION_MODE CMODE
X-Up-Bearer-Type GPRS
X-Nokia-gateway-id NWG/4.0/CD3/Build04
x-wap-profile http://www.amobile.com.cn/ua/uapE600.xml
Cookie JSESSIONID=a_RiMX_dre9d;
(2)m3gate模拟器访问的情况:
Accept-Language en
Accept text/vnd.wap.wml, text/vnd.wap.wmlscript, image/vnd.wap.wbmp, image/png, */*
Accept-Charset UTF-8
User-Agent M3Gate/1.2
Host 159.226.203.244:8001
Connection Keep-Alive
Cookie __utma=61259500.669454885.1168311463.1168311463.1168311463.1; __utmz=61259500.1168311463.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); JSESSIONID=amfpHdN-Exa_
————————————————————————
z-blog有一个WAP访问功能,但是在使用中,如果不允许FF、IE等桌面浏览器访问,那么即使直接访问WAP.ASP,许多型号的手机并也不能正常显示z-blog的WAP,而如果允许FF、IE等桌面浏览器访问,则有被暴力破解密码的危险(没有验证码,如果要写个程序破解很简单。)。怎么办呢?经过排查,我发现:许多手机提交的HTTP_ACCEPT并不是规范的“text/vnd.wap.wml”,z-blog不会当作手机访问来处理,所以不能访问。那怎么办呢?我们把它改的宽松一点不就得了
一般手机不管提不提交“text/vnd.wap.wml”,总会提交一个含有“wap”的HTTP_ACCEPT,我们就从这里入手:
If InStr(LCase(Request.ServerVariables("HTTP_ACCEPT")),"text/vnd.wap.wml") > 0
改为 If InStr(LCase(Request.ServerVariables("HTTP_ACCEPT")),"wap") > 0 Then
——————————————————————————
Dim h_accept
h_accept = LCase(CStr(Request.ServerVariables("HTTP_ACCEPT")))
If InStr(h_accept, "application/vnd.wap.xhtml+xml") <> 0 Then
Response.ContentType = "application/vnd.wap.xhtml+xml"
ElseIf InStr(h_accept, "application/xhtml+xml") <> 0 Then
Response.ContentType = "application/xhtml+xml"
ElseIf InStr(h_accept, "text/vnd.wap.wml") <> 0 Then
Response.ContentType = "text/vnd.wap.wml"
Else
Response.ContentType = "text/html"
哈~没想到看起来还真不错,但是想到需要输入这么麻烦的地址可能有点麻烦;所以就想起来弄个手机访问判断。
索性网络这方面的资料不少,在一位同博的日志发现并引用来做参考如下:
在common文件夹下增加checkwap.asp内容为:
<%If InStr(LCase(Request.ServerVariables("HTTP_ACCEPT")),"text/vnd.wap.wml") > 0 Then Response.Redirect "wap.asp"%>
然后在header.asp包含checkwap.asp.
<!--#include file="common/checkwap.asp" -->
另附其它一些参考代码:
<%@ Page Inherits="System.Web.UI.MobileControls.MobilePage" %>
<%@ Register TagPrefix="Mobile" Namespace="System.Web.UI.MobileControls" Assembly="System.Web.Mobile" %>
<Script Runat="Server">
Sub Page_Load
Dim caps As System.Web.Mobile.MobileCapabilities
caps=Request.Brower
Response.Write(caps.Brower)
Response.Write(caps.Type)
Response.Write(caps.PreferredRenderingType)
Response.Write(caps.ScreenCharactersWidth)
Response.Write(caps.ScreenCharactersHeight)
End Sub
Browser属性返回设备使用浏览器类型,如:IE,Phone.com
Type属性返回设备的一般类型,如:IE5,Pocket Internet Explorer
PreferredRenderingType属性返回设备的表达语言的MIME类型,如html32,wm111
后面两个是返回设备可以水平和垂直显示的字符数
Alpar
<%
Response.Buffer = TRUE
Dim IsWap
httpAccept = LCase(Request.ServerVariables("HTTP_ACCEPT"))
if Instr(httpAccept,"wap") then
IsWap=1
Else Response.Redirect "/index.html" : Response.Flush : Response.End
End if
%>
顺便说一下,GOOGLE实在厉害的让我敬佩。在手机浏览器中输入http://www.google.com你就会马上发现谷歌一下子自动变成了方便手机访问的搜索页,这个就是:移动谷歌(而百度却没有这方面的功能)。不仅如此,在GOOGLE上搜索到的平时我的浏览的网页如果在手机上点击访问的话,都会被贴心的GOOGLE智能的转化成手机网页即:wap网页。呵呵~GOOGLE,你果然强!
仅通过http头可以辨别吗,下面是处理访问时,http头的各参数值情况。
在第一种情况中(手机访问),不太明白这个 ‘X-Forwarded-For 10.13.10.126’ 和 ‘X-Source-ID 211.136.72.249’这两个参数值的实际意义,google了一下,也没查出个所以然。是否包含这些参数即代表是手机访问呢?
在第二中情况中(模拟器访问),user-agent是模拟器的型号,是否取不到user-agent值即代表手机访问呢?
不知道大家是否有遇到类似的需要区分不同类型访问的问题
(1)手机访问的情况:
accept text/html, application/xhtml+xml, application/vnd.wap.xhtml+xml, application/vnd.wap.wmlscriptc, application/vnd.wap.wmlc, text/vnd.wap.wml, */*, text/x-vcard, text/x-vcalendar, image/gif, image/vnd.wap.wbmp
accept-charset UTF-8, ISO-8859-1, *
connection Keep-Alive
bearer-indication 11
Via WTP/1.1 BJBJ-PS-WAP2-GW09.bj2.monternet.com (Nokia WAP Gateway 4.0/CD3/4.0.04)
X-Forwarded-For 10.13.10.126
X-Source-ID 211.136.72.249
X-Nokia-CONNECTION_MODE CMODE
X-Up-Bearer-Type GPRS
X-Nokia-gateway-id NWG/4.0/CD3/Build04
x-wap-profile http://www.amobile.com.cn/ua/uapE600.xml
Cookie JSESSIONID=a_RiMX_dre9d;
(2)m3gate模拟器访问的情况:
Accept-Language en
Accept text/vnd.wap.wml, text/vnd.wap.wmlscript, image/vnd.wap.wbmp, image/png, */*
Accept-Charset UTF-8
User-Agent M3Gate/1.2
Host 159.226.203.244:8001
Connection Keep-Alive
Cookie __utma=61259500.669454885.1168311463.1168311463.1168311463.1; __utmz=61259500.1168311463.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); JSESSIONID=amfpHdN-Exa_
————————————————————————
z-blog有一个WAP访问功能,但是在使用中,如果不允许FF、IE等桌面浏览器访问,那么即使直接访问WAP.ASP,许多型号的手机并也不能正常显示z-blog的WAP,而如果允许FF、IE等桌面浏览器访问,则有被暴力破解密码的危险(没有验证码,如果要写个程序破解很简单。)。怎么办呢?经过排查,我发现:许多手机提交的HTTP_ACCEPT并不是规范的“text/vnd.wap.wml”,z-blog不会当作手机访问来处理,所以不能访问。那怎么办呢?我们把它改的宽松一点不就得了
一般手机不管提不提交“text/vnd.wap.wml”,总会提交一个含有“wap”的HTTP_ACCEPT,我们就从这里入手:
If InStr(LCase(Request.ServerVariables("HTTP_ACCEPT")),"text/vnd.wap.wml") > 0
改为 If InStr(LCase(Request.ServerVariables("HTTP_ACCEPT")),"wap") > 0 Then
——————————————————————————
Dim h_accept
h_accept = LCase(CStr(Request.ServerVariables("HTTP_ACCEPT")))
If InStr(h_accept, "application/vnd.wap.xhtml+xml") <> 0 Then
Response.ContentType = "application/vnd.wap.xhtml+xml"
ElseIf InStr(h_accept, "application/xhtml+xml") <> 0 Then
Response.ContentType = "application/xhtml+xml"
ElseIf InStr(h_accept, "text/vnd.wap.wml") <> 0 Then
Response.ContentType = "text/vnd.wap.wml"
Else
Response.ContentType = "text/html"
哈~没想到看起来还真不错,但是想到需要输入这么麻烦的地址可能有点麻烦;所以就想起来弄个手机访问判断。
索性网络这方面的资料不少,在一位同博的日志发现并引用来做参考如下:
在common文件夹下增加checkwap.asp内容为:
<%If InStr(LCase(Request.ServerVariables("HTTP_ACCEPT")),"text/vnd.wap.wml") > 0 Then Response.Redirect "wap.asp"%>
然后在header.asp包含checkwap.asp.
<!--#include file="common/checkwap.asp" -->
另附其它一些参考代码:
<%@ Page Inherits="System.Web.UI.MobileControls.MobilePage" %>
<%@ Register TagPrefix="Mobile" Namespace="System.Web.UI.MobileControls" Assembly="System.Web.Mobile" %>
<Script Runat="Server">
Sub Page_Load
Dim caps As System.Web.Mobile.MobileCapabilities
caps=Request.Brower
Response.Write(caps.Brower)
Response.Write(caps.Type)
Response.Write(caps.PreferredRenderingType)
Response.Write(caps.ScreenCharactersWidth)
Response.Write(caps.ScreenCharactersHeight)
End Sub
Browser属性返回设备使用浏览器类型,如:IE,Phone.com
Type属性返回设备的一般类型,如:IE5,Pocket Internet Explorer
PreferredRenderingType属性返回设备的表达语言的MIME类型,如html32,wm111
后面两个是返回设备可以水平和垂直显示的字符数
Alpar
<%
Response.Buffer = TRUE
Dim IsWap
httpAccept = LCase(Request.ServerVariables("HTTP_ACCEPT"))
if Instr(httpAccept,"wap") then
IsWap=1
Else Response.Redirect "/index.html" : Response.Flush : Response.End
End if
%>
顺便说一下,GOOGLE实在厉害的让我敬佩。在手机浏览器中输入http://www.google.com你就会马上发现谷歌一下子自动变成了方便手机访问的搜索页,这个就是:移动谷歌(而百度却没有这方面的功能)。不仅如此,在GOOGLE上搜索到的平时我的浏览的网页如果在手机上点击访问的话,都会被贴心的GOOGLE智能的转化成手机网页即:wap网页。呵呵~GOOGLE,你果然强!
推荐阅读