锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

WAP经验总结

时间:2023-07-12 12:37:00 2cl75高压二极管

WAP经验总结

包括WAP1.2和WAP2.包括移动和联通,对各种手机WML和XHTML总结支持

Nokia 3310 对do提交不显示确定性,即软按钮支持存在问题;
——————————————-
NEC N800
对input输入框有format不能输入多余属性;
字符集:我的实际测试很奇怪,GET的居然UTF-8和GB2312都可以;
支持页面内CSS ,支持背景图;
支持XTHML,WAP2.0;
选择图片链接后,很明显难看,土黄色外框;
支持滚动字
支持背景音乐
支持表格
——————————————-
三星SCH-X859(CDMA)对WAP2.支持很好,对link href=”images/style.css” mce_href=”images/style.css” rel=”stylesheet” type=”text/css” 支持写作、背景图片、背景音乐等。选择图片链接后,有一个不太明显的框但能感觉到选择;
这款手机的*键和#键是手机固化的向上向下,联通的规定无法执行;
——————————————–
Nokia 6681 (WAP2.0)对link href=”images/style.css” mce_href=”images/style.css” rel=”stylesheet” type=”text/css” 写作不支持,对图片链接的选择没有反应,看不出是选中还是不选中,进去才知道。
Nokia6670 和Nokia6681显示效果一样!6670支持的编码是UTF-8(传输也没有指定UTF-8,不是8859_1);
浏览器:Series60 版本2.6(显示效果真的很好~)
Nokia7610
不支持背景音乐()
支持滚动文本
——————————————–
Moto E680 (WAP2.0)不支持背景图的,无论添加CSS还是不加CSS。这个浏览器V2.2对页面的显示效果不是很好,连梦网都很烂~而且链接颜色不选蓝色选红色,很难看~在图片链接周围加一圈小点,选择不明显。
——————————————–
索爱 S700c 不支持背景图片,不管怎样写~ 显示字体较大~
——————————————–

关于特殊字符:
Nokia 3100 对 ※(※;) 字符显示 □

索爱K700C: 字符显示 □
——————————————–
关于测试:
最佳测试手机:NEC-N800 为什么说最好?因为这款手机可以直接查看地址,刷新地址;用于浏览wap页面看起来舒适,兼容性好;
手机测试最差:NOKIA 3100 为什么最糟糕?因为这部手机不能直接查看地址,所以必须保存书签才能查看。兼容性差,缓存小,经常出现莫名其妙的问题;屏幕也很小;
——————————————–
关于UA(手机号)问题:
正常的话都拿到UA是的,手机号不一定能拿到;
2006-04-19 更新:
广东:拿不到手机号,拿不到UA;
上海:拿不到手机号,就能拿到。UA;
北京:拿不到手机号,拿不到手机号。UA;

即使你在上海用北京的卡访问WAP,去上海的网关,一定要带北京的卡去北京,才会有效果;我试着用广东的卡去上海wap还是能拿到UA的。
——————————————–
关于session问题:
的确,有些手机不支持session是的,这种现象越来越少,但有些网关可能不支持session,这个问题可以通过程序来解决URL后带session id来解决;
若必须使用session页面中的链接url需要用URLEncode保证该页面的通用性;
使用session 服务器资源消耗量大;
——————————————–
关于重定向问题:
用WML的ontime有几个重定向timer的name相同的页面互相跳转,手机会有cache,而同一个timer只工作一次,也就是说,跳一次就再也不跳了。解决办法不同name ,或者干脆去掉这个name属性;

移动,发现采取(response.sendRedirect)当重定向到计费页面时,会丢失一些移动MISC平台带的参数无法弹出点播计费页面,特别是直接跳转到计费地址。
——————————————–
关于手机编码:
大部分手机支持UTF-8编码,但也有一些手机支持GB2312的编码的;
——————————————–
关于CSS:
并不是所有的手机都支持CSS有的,有的支持link嵌入,更多的支持直接写在页面上(移动推荐),另一个非常重要的是,CSS里面一定是小写,我试过大写对一些手机不起作用(不要相信Opera).
——————————————–
图片链接:

wap1.2和wap2.支持图片链接;
最好在图片周围加一圈白边,这样选择效果更明显;
——————————————–
关于移动:

移动全网:

2006-02-06

1 直接访问计费地址:移动计费确认页不会弹出,不会计费;
2 直接访问反向订购地址(wap.monternet.com) 订单确认页不弹出,订单关系不发送;
3 直接访问反向订购地址(wap.monternet.com),SPURL为计费地址 订单确认页不弹出,移动计费确认页弹出,计费,订单关系第一次点播;
4 直接访问反向订购地址(wap.monternet.com),SPURL其他地址(计费地址除外) 订单确认页不会弹出,订单关系不会发送;然后访问收费地址 弹出移动计费确认页,计费,首次点播发送订购关系;
5 订购关系后,直接访问计费地址 移动计费确认页不会弹出,不会计费;
6 订购关系后,通过我的梦网书签访问,访问计费地址,弹出计费确认页,计费;
7 订购关系后,通过梦网频道直接登录是一样的。
8 订购关系后,取消订购,成功!
9 通过梦网频道登陆效果和直接登陆是一样的。
无论你是先订包月后订包,还是先订包月后订包月,我梦网(收藏夹)显示的顺序都是 按次 包月。

只有订购引导订购用户MISC否则平台会直接导向SP的链接;

移动在线测试:

有专门的测试入口,测试手机号码;
8位测试业务代码10位,上线后8位;
在业务中,不要写直接重定向(程序)到计费地址,否则会丢失移动参数,导致不扣费。建议使用必须跳转的地方wml的timer跳,xhtml mp用


采用refresh如果在程序中设置背景,则会有一个带背景的空白屏幕,跳转时可以删除背景;采用timer跳转看起来更正常;

移动MISC返回错误:

【对不起,由于服务提供商900651通信故障,服务暂时无法完成。】大部分都是。SP有一次我问了服务器/程序。SPURL订购时总会出现错误;
[对不起,服务器很忙。请返回梦网主页。]。如果是订购,通常是provision处理时间过长;
【服务暂时不可用,请稍后再试。 不清楚,但我遇到过;
[权利鉴定失败。]有一次,在线测试没有使用指定的测试手机号码来访问在线测试业务。
[您暂时不能订购此业务。 你的卡里没有钱,但也可能是一种错觉,有时我认为手机卡没有钱(有些允许透支),等了一会儿就正常了。
[对不起,请求参数错误,服务暂时无法完成。]这种参数在反向订购时通常是错误的;

广东移动:
新上线业务先免费一段时间,但申报时会有计费地址等;
河南移动:
新推出的业务全部免费,三个月后按用户数量申报计费;
——————————————–
关于WML:
关于WML:
如果一个页面看样子没什么错误,可以正常显示,就是在页面的底部 将所有的wml打印出来,然后奇怪地出现在下面,比如/00/00/00 …什么,这百分之百是 多了一个〈/p〉标记
——————————————–
关于铃声:
MIDI是控制手机音源的数据。相当于乐谱的音符,本身没有声音。演奏必须依靠手机里的音色。我们必须写每首歌的每一个音符。输入各种乐器MIDI数据控制手机上的音色。目前手机还没有声源。只有AMR、MP三等波形格式可以发出人声。10首同一首歌的音符是一样的,但音色不同,只能在手机上发出一种声音。
有些手机不支持铃声格式,比如wma文件,Nokia3100显示未知格式,NEC N800显示一小句乱码,一些高端手机显示长乱码。
——————————————–
关于开发:
java.net.URLEncoder.encode(SPURL);里面的&必须换成&,否包含则encode SPURL手机上的链接通常没有反应;
POST必须注意将字符转换成字符UTF-8处理,否则会有一些GB2312字符不能直接传输(表现为查询结果为空);
——————————————–
关于WAP PUSH:
WapPush如果访问地址完全相同,那么某个手机只能收到第一个。
——————————————–
关于传说:
WAP服务指示定义在推送协议中(SI:Service Indication)和服务加载(SL:Service Load)两项服务,其中SI用户收到的方式push可根据用户意愿处理(立即或以后);SL则用户收到push不用户干涉立即上网;SL它不受欢迎push,现在很多手机都不支持,包括大部分nokia手机;
现在很多公司通过改变sms包头和内容将是普通的sms变成push发送消息WAP PUSH;
捆绑,据说当用户走到弹出确认页面时,他不想点击确认,但通过脚本(wmls),订单可以自动确定,脚本还是有客户端的,没有证据。
订购包月后按次计费;
退休后继续收费;
模拟模拟是利用短信中心的平台将源号修改为手机用户的号码,这是任意的,可以模拟1860或指定号码。但是有一个问题:就是利用这短信中心模拟的源号码只能向所有的移动用户发送消息;
◇用一些用户很感兴趣的语言将用户骗取订购,订购后则完全边了样;通常用于WAP PUSH群发;也可以杜撰业务的资费,订购后发现资费大涨;

——————————————–
关于浏览器,平台,OS,SVG:

Nokia Series30(Nokia OS) 96*65 WAP/XHTML MIDP java MMS
Nokia Series40(Nokia OS) 128*128* WAP/XHTML MIDP java MMS
Nokia Series60(Symbian OS) 176*208 WAP/XHTML MIDP java MMS
Nokia Series80(Symbian OS) 640*200 WAP/HTML Personal java MMS
Openwave SDK 6.2.2
Openwave V7
Moto v2.2
Access NF3系列
Pollex WAP Browser

诺基亚40系列是指:7600,7200,7250,7210,6100,6220,6230,6610,6650,6820,6800,6810,3100,3200,3300,5100。
诺基亚60系列是指:3650,3660,6600,7650,N-Gage。

wap2.0手机
NOKIA(诺基亚) 3100,3220,6600,6260,7610
MOTO E365,V872,C650,V180,E680,V878,V3,A768,V80,V220,A780
SONY ERICSSON P908,P910c,K506c,S700c,T238,T618,T628,T290
QT557,QT735,QT756
NEC N700,N820,N830,N710,N718,N720,N728,N110
三菱 M350,M750,M330
Panasonic X200,A500
SUMSUNG E108,E338
SIEMENS CF62,SX1
多普达 565,696,818

支持SVG的手机
SVG-enabled phones have hit the street, and this is only a beginning! Here is an updated list of phones that you can buy in your shop and come fully equipped with a compliant SVG Tiny 1.1 implementation with pictures of the main models further down:

Motorola: C975, C980, E770V, E1000, i870, V3X, V975, V980, V1050
NEC: 802
Nokia: 3250, 6265, 6280, 7710, E60, E61, E70, N70, N71, N80, N90, N91, N92
Panasonic: MX6, MX7, SA6, SA7, VS3, VS7
Sagem: my-X8, my-V76, my-V85
Samsung: D600, E350, Z300, Z500, ZV10, ZV30
Sanyo: S750
Sharp: V501SH, V601SH, V602SH, V603SH, V604SH, V703SH, V703SHf, 802, 902, V903SH
Siemens: C65, C70, C75, CF65, CFX65, CL75, CX65, CX70, CX70 Emoty, CX75, M65, M75, S65, S75, SF65, SL65, SL75, SK65, SP65
Sony Ericsson: D750, F500, K300, K500, K508, K600, K608, K700, K750, P990, S600, S700, S710, V600, V800, W550, W600, W800, W810, W900, Z500, Z520, Z800
Toshiba: TS 803, TS 921, V902T, V903T

128*128相素(S40系列 Nokia Series 40 Nokia N3100, N3108, N3200, N3300, N3510i, N3530, N5100, N5140, N6100, N6108, N6220, N6610, N6800, N6820, N7200, N7210, N7250,N6230)
120*130相素(Sharp Gx10 Gx12 Motorola V750)
120*147相素(Sharp Xera GZ100)
176*204相素(Motorola V300, V303, V400, V500 , V600,V80,E398)
176*208相素(S60 系列:是指Nokia Series 60 Nokia N7650 N3650, N3660,N6600, N6620, N7610)
176*220相素(S60 SonyEricssonK700 Z1010 Siemens SX1)
176*200相素(3G系列:是指 LG 8110 NEC 313 616 Motorola A835 176*206相素)
240*260相素(Sharp Gx20 Gx22 Gx30 Gx32)
240*260相素(vodafone P4 P5 P6 W日本手机 FOMA240*265)

1:42 | 添加评论 | 固定链接 | 引用通告 (0) | 记录它 | WAP开发
sms实现wap push的方法和格式(转载)
 
wap push格式
00     ’SMSC Len。用手机上设置短信中心号码
51     ’submit type
00     ’SMS_TP_Message_Reference type
0B    ’对方电话的长度
A1     ’Number type
13175639296F6       ’电话号码:13573629696
00     ’SMS_TP_PID
F5     ’SMS DCS
A744         ’SMS available date
0B05040B8423F00003030101         ’Wap Push Header 1
29060603AE81EA8DCA   'Wap Push header 2
02
05  '-//WAPFORUM//DTD SI 1.0//EN
6A  'UTF-8
00
45  '
C6  ' 08  '
0C  'href="http://
03  '字符串开始
687474703A2F2F3231382E35392E3133382E35343A32303030  'URL:   http://218.59.138.54:2000
00  'URL 字符串结束
01  '>
03  '内容描述字符串开始
'这里就是显示给用户的内容,用utf-8编码。
9A6C5EF6671D       '内容描述:马延朝
00  '内容描述字符串结束
01  '
"
01  '

可以只能显示很少的汉字,请高手指点怎么分包发送更多的汉字?

一下方法是经过验证的。

TrxID  =一个随机数
    fullStr = "0605040B8423F0" & TrxID & "0601AE"
    fullStr = fullStr & "02056A0045C6080C03"
    fullStr = fullStr & StrToHex(TheURL, 2)
    fullStr = fullStr & "001103" & "0102"
    fullStr = fullStr & "40494400080AC307" & Format(Now, "yyyymmddhhmmss")
    fullStr = fullStr & "10C304" & "20990101" & "0103"
    fullStr = fullStr & StrToHex(MServiceName, 2) & "000101"


分段发送的

例如  URL:wap.gd.monternet.com/?userType=B&serviceID=04020028 提示信息:神秘激情地带,江湖儿女情长神秘激情地带,江湖儿女情长神秘激情地带,江湖儿女情长
第一包:
0B05040B8423F0000355020155060403AE81EA02056A0045C60C037761702E67642E6D6F6E74657
26E65742E636F6D2F3F75736572547970653D42267365727669636549443D303430323030323800
070103E7A59EE7A798E6BF80E68385E59CB0E5B8A62CE6B19FE6B996E584BFE5A5B3E68385E995BF
E7A59EE7A798E6BF80E68385E59CB0E5B8A62C 
第二包:
0B05040B8423F00003550202E6B19FE6B996E584BFE5A5B3E68385E995BFE7A59EE7A798E6BF80E6
8385E59CB0E5B8A62CE6B19FE6B996E584BFE5A5B3E68385E995BF000101 ,解释可参考WDP WSP,我就不具体说了


0B是头的总长度
05040B8423F0是固定的,表示接下来是一个WAP PUSH
分包的关键是0003550201,对应GSM 03.40里9.2.3.24.1,00表示是Concatenated Short Messages,03是长度,55是reference number,楼主在这儿固定编码会有问题的,如果同时下发两条这样的多包短信给同一个手机,手机就区分不开了,02表示分成2个短信发送,01是当前包的序号。


一个扩展包wappush包是这么构成的
WDP + WSP + SI/SL

如果长度超常(短信一个包的Content不要超过140)

就要分解成

WDP1 + (WSP+SI/SL)的part 1
WDP2 + (WSP+SI/SL)的part 2
...
WDPN + (WSP+SI/SL)的part N

如单包
WDP: 06 05 04 0B 84 23 F0
WSP: ...
SI/SL:...

双包是
第1包
WDP: 0B 05 04 0B 84 23 F0 00 03 01 02 01
Part1: ...

// 00 - UDH IE Tag
// 03 - UDH SAR IE Length
// 01 - Refrence
// 02 - Total Packet
// 01 - Current Packet

第2包
WDP: 0B 05 04 0B 84 23 F0 00 03 01 02 02
Part2:...


WDP参考相关文档。

=====================================================
首先,构造一个Push消息体:

02
05  '-//WAPFORUM//DTD SI 1.0//EN
6A  'UTF-8
00
45  '
C6  ' 08  '
0C  'href="http://
03  '字符串开始
这里就是url从"http://"以后的那部分的每个字符的ASCII码
00  '字符串结束
0A  'created=
C3  '时间
07  '7个字节,也可以是04,下面就只需要年月日就可以了
20 03 01 01 00 00 00 '年,月,日,时,分,秒,格式如何一看就明白吧。
10  'si_expires=
C3  '时间
07  '跟上面一样
20 04 01 01 00 00 00
01  '>
03  '字符串开始
这里就是显示给用户的内容,用utf-8编码。
utf-8编码,英文字符直接用ascii码;中文如果unicode是(二进制)abcdefgh ijklmnop,
那么utf-8就会变成1110abcd 10efghij 10klmnop
00  '字符串结束
01  '"
01  '

有了Push消息体之后,需要在前面增加一个Push PDU
81  'transaction id (connectionless WSP)
06  'pdu type (06=push)
06  'Headers len
03 AE 81 EA    'content type: application/vnd.wap.sic; charset=utf-8
8D    'content-length
XX  '这里就是Push消息体的长度。如果消息体长度小于128,那么就要加上128。例如是93个字节,那么需要填入DD
'至于大于127怎么处理,按照协议好像应该是这样,例如原来的二进制abcdefgh,那么就要弄成两个字节:
'1000000a 1bcdefgh,但是尝试还没成功

在然后,还要在前面增加一个UDH
06 'User Data Header Length (6 bytes)
05 'UDH Item Element id (Port Numbers)
04 'UDH IE length (4 bytes)
0B 84   'destination port number
23 F0   'origin port number

如果所有这些加起来大于140个字节,那么就需要修改UDH头,分成两条短消息串联。但是没有尝试成功。

发送的时候,udhi=1,pid=0,dcs=4
Nokia 3650/7650肯定OK,motorola t720肯定ok,siemens 3118,3618肯定不行,其他的还没尝试。

同样的技术可以用来发送mms通知、fundown的铃声图片。

需要解决的问题:长于127字节/两条短信的时候该怎么办。

另转载 Wap push over sms 实践  


通过短信进行点对点的WAP PUSH,本质上来说应该是发送一个wap页面(WBXML)到接收方,里面含有一段文字和一个url链接。

在发送端采用PDU模式发送,编码是UCS2。
 
整个发送的包大部分内容都是固定的,只需要对几个地方根据希望发送的内容进行一下替换即可。
 
我参考的例子是这样的,只用说明中红色的部分是需要变化的:
0051000BA13108086406F600F5A7850B05040B8423F0000303010129060603AE81EA8DCA02056A00
45C6080C033231312e3133362e3135332e33302f776170707573682f70757368496e6465782e6a737
03f7075736849643d3035303531313134313630353231000103E8AFB7E782B9E587BBE4BBA5E4B88B
E993BEE68EA5E88EB7E58F96E5BDA9E4BFA1E58685E5AEB9000101

00 SMSC 地址信息的长度 00表示用手机上设置短信中心号码,PDU 串的“SMSC 址格式”段和“SMSC 地址”段将省去
51 基本参数(TP-MTI/VFP) 不要求发送回复
00 消息基准值(TP-MR)
0B 对方电话的长度
A1 目标地址格式 A1表示为国内格式
3108086406F6 目标地址,补‘F’凑成偶数位后奇偶位互换 (因为手机号码是11位,需要补一个F,再将奇偶位互换,比如12345678901需要变成2143658709F1)
00 协议标识(TP-PID) 是普通GSM 类型,点到点方式
F5 用户信息编码方式 (TP-DCS)
A7 有效期(TP-VP)
85 用户信息长度(TP-UDL) (此处是从下面的0B开始所有的字节数/2对应的十六进制数)
0B WAP PUSH头部的总长度
05040B8423F0表示接下来是一个WAP PUSH
00 表示是Concatenated Short Messages
03 长度
03 reference number
01 表示分成1个短信发送
01 当前包的序号
29060603AE81EA8DCA WSP
02 标记位
05 -//WAPFORUM//DTD SI 1.0//EN
6A UTF-8
00 标记开始
45
C6
08
0C href=/"http://
03 字符串开始
3231312e3133362e3135332e33302f776170707573682f70757368496e6465782e6a73703f7075736
849643d3035303531313134313630353231 URL (编码过的URL,不带http://)
00 URL 字符串结束
01 >
03 内容描述字符串开始
E8AFB7E782B9E587BBE4BBA5E4B88BE993BEE68EA5E88EB7E58F96E5BDA9E4BFA1E58685E5AEB9 内容描述字符串 (编码过的文字内容)
00 内容描述字符串结束
01
01
 
 
AT指令发送时:
at+cmgf=0 //设置发送为二进制模式
OK
at+cmgs=93 //十进制的数字,值为 (上面生成的一大串的字节数/2)-1,还没搞清为啥要减一
> 0051000BA1。。。。。。。(就是那一大串了) Ctrl+Z
+CMGS: 14
OK
 
发送成功

0:42 | 添加评论 | 固定链接 | 引用通告 (0) | 记录它 | WAP开发
9月16日
WAP开发(三)
38. 为什么META标签不工作?

浏览器不支持默认的meta标签,例如:

 

虽然有少量网关支持非常有限的META标记。但是测试显示,如果使用了它们,网关就会出问题。例如某网关不支持普通的HTTP Cache控制,如果要实现Cache控制只好使用特殊的META标记。显然从其他
网关来的用户就可能不支持这个META。注意:不要使用META tags。肯定有其他的方式来完成你的想法。

最常使用的META是:

 

这个告诉浏览器重新装入指定的WML页面。WML中已经包含了一个

39. 为什么服务器接收不到用户发送的参数?

用户输入的参数或者其他参数可以像在HTML中一样通过提交方式发送到服务器。在HTML中这个是

,POST或者GET。
首先知道要知道POST和GET的区别。对于POST浏览器将生成一个数据包将变量名和它们的内容捆绑在一起,并发送到服务器。对于GET,它其实是一个URL请求,变量名和内容都包含在URL中。
对于WAP环境,要求是非常严格的,必须要根据协议来操作。虽然以下的URL

"/cgi-bin/somescript?username=john&telephone=123-123-1234&occupation=banana+bender"

可以在HTML环境中工作,但是在WAP环境中无法工作。以上的部分编码将使得保护的变量内容被误解。特殊的空格(在 banana 和 bender )被转成 “+”。 URL就根本没有空格。
以上的URL在WAP中无法工作的主要原因是用来分割每个变量和变量内容的 & (与号)没有转义。正确的格式应该是:

"/cgi-bin/somescript?username=john&telephone=123-123-1234&occupation=banana+bender"

在这里 & 被名字实体所替换。为了解释更清楚些,请看下面的代码:


 


 



Send this


注意这不是真正的WAP协议,专门的字符应该转义,否则将得到不可预料的结果。

40. 为什么在HTTP中的Referer看不见?

当HTML浏览器从一个URL到另外一个URL的时候,它默认地会发送一个叫做 Referer的 HTTP头给服务器,告诉它在浏览这个页面之前的那个页面。这是一个非常有用的特点,在WAP环境中同样也有。
但是既然这个信息来自用户代理(浏览器)、WAP设备,通常为了节约带宽和时间,就被省略了。
为了使用 Referer ,应该使用新的URL标签例如: 等等,并且加入参数:sendreferer。

 

这样就会把参考的URL发送到服务器。

41. 如果没有找到URL,有可能重新将用户引导到另外一个WML卡片或者页面吗?

是的。但这是服务器端的特点,与客户端没有关系。

42. 为什么普通的HTTP 302重新导向不好使?

这的确是一个事实。核心的问题是在服务端的脚本语言,而不是在服务端语言和服务器之间。
所谓的302 Found HTTP反应是指服务器告诉用户代理,它所需要的资源在另外的地方可以找到。302反应可能包括一个人们可理解的信息,如果在这种情况下“ Content-type: ”就被设置了
。笔者所测试过的服务器,即使没有内容也都加了“Content-type:”。默认的 “Content-type:” 是text/html。当然有些网关不喜欢这个类型。
以下的例子已经经过测试,在Apache和Microsoft Internet Information Server都可以工作。如果使用其他的Web Server,或者其他的脚本语言,需要能转换这些简
单的脚本。关键的工作是十分简单的,除非需要,不用告诉服务器整个HTTP头。大多数Web Server将自动完成这个HTTP头,使得用户代理可以理解。
所有的代码例子可以在线测试。如果它们能够工作,用户将被重新引导到http://wap.colorline.no/clientinfo.html ,在那儿将产生一个WML页面来显示所有的HTTP头。
PHP 代码测试可以在 http://wap.colorline.no/wap-faq/apps/302test.php3中找到。

    header("Location: http://wap.colorline.no/clientinfo.html");
    header("Content-type: text/vnd.wap.wml";
?> 

Perl测试代码可以在http://wap.colorline.no/cgi-bin/302test.pl中找到。 

print "Location: http://wap.colorline.no/clientinfo.html/n";
print "Content-type: text/vnd.wap.wml/n"; 

ASP测试代码可以在 http://www.colorline.no/302test.asp中找到。 (注意不同的URL): 

<%
    Response.Redirect = "http://wap.colorline.no/clientinfo.html";
    Response.ContentType = "text/vnd.wap.wml";
    Response.Flush
    Response.End
%>

43. 可能在WML中实现ASP Session吗?

不可能。可以把信息存储在临时变量中模拟Session。Session是保存在用户PC上的“cookies”中。目前的WAP设备不支持“cookies”。不过下一代的设备和WML可能支持“cookie
s”。

44. WAP支持Session吗?

在HTML中,一个十分普遍的“处理”用户的方法就是为每个用户分配一个“session”。这个有时候是通过指定一个独一无二的cookies来实现的。然而WAP的资源非常有限,因此session的处理必
须以不同的方式来处理。
Alex Kriegel 提供了一个安装在 WAPlinks的Custom Session Object包。这个zip文件中包含了VB类的文件和编译过的Dll文件,还有相关的文档。这些可以在http
://www.waplinks.com/customsessionobject.zip下载。
另外一种方法是使用 PHPlib ,它是使用 PHP 编写的。
Tarique (tarique@nagpur.dot.net.in) 提供了如何使用PHPlib来验证和处理每个WAP用户。有相关的文件和注释可以到下面地址下载:

http://wap.colorline.no/wap-faq/archive/phplib_wml.zip
45. 可以在WAP中使用Cookies吗?

在理论上是可以的,但不是所有的WAP设备都支持。另一个方法来管理会话是使用隐藏的fields(包含会话标识,无论是POST或者GET方式)。

46. WAP支持Cookies吗?

普通的HTTP Cookies是作为WAP的扩展来实现的。无论你以前听到什么,Cookies的支持将越来越好。实际上Phone.com的 UP.Link网关已经支持这个功能有一段时间了。
可以使用以下的脚本语言检测Cookie-support,:
http://wap.colorline.no/wap-faq/apps/cookietest.php3
脚本在http://wap.colorline.no/demos.html也可以得到。
当第一次看见卡片的时候,记数器应该为0。所有的Cache都被关闭。卡片通过在URL中随机地加入变量来强制自己加载(笔者不推荐这种强制加载办法)。当点击增加计数连接,页面将重新加载,卡片就再次出现,并
且记数器变成1。
在脚本中,Cookie的名字被称做 TestCookie,它有很长的生命期,因此可以隔好几天再来查看记数器,它将是上一次的数值。这要求你能使用与上一次访问所使用的WAP环境一样,否则将把你的数值清0

如果记数装置一直都是0,那么cookie 就没有能传送到你的Web Server。这个脚本也能表示Cookie是否被传送。
另外,这个脚本同样还显示HTTP头中的HTTP_VIA 和 HTTP_USER_AGENT 。这些能够得到所使用的网关和模式。一些网关使用HTTP_VIS标识自己,而另外一些使用HTTP_USER_
AGENT,还有一些则让程序无法知道。
下面是它的PHP代码。一个标准的 PHP setcookie() 函数只有在这种脚本语言中才会出现。函数只是简单地设置cookie,并且PHP变量 $HTTP_COOKIE_VARS 用来读取coo
kie。

if(isset($HTTP_COOKIE_VARS["TestCookie"]))
{// Check if TestCookie is set
      $cookieset = "set";

// Read the Cookie
      $cookieid = $HTTP_COOKIE_VARS["TestCookie"];
  // and increase its value
      $cookieid++;
     }
    else {
  // cookie was not set
      $cookieset = "not set";
  // start counter at zero
      $cookieid = 0;
    }
  // apply the Cookie to the HTTP header
 setcookie("TestCookie",$cookieid);
  // set the content type for WML
    header("Content-type: text/vnd.wap.wml");

// disable ALL caching
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-cache, must-revalidate");          
    header("Pragma: no-cache");                                  
    echo("/n");
 echo("  /"/n/n">http://www.wapforum.org/DTD/wml_1.1.xml/">/n/n");
 echo("/n");
    echo("/n");
  // Generate random value for reload forcing
    $random = mt_rand(100000,999999);
 ?>
 
 

// Even more cache disabling
 
 
 
 


   Cookie "TestCookie" was .
   Value is currently ""
 


 


Increase value



Gateway: 
      if(isset($HTTP_VIA))
{ // Is there something in the HTTP_VIA variable?
      echo($HTTP_VIA);
    }
    else {
      if(isset($HTTP_USER_AGENT))
{ // Is there something in the HTTP_USER_AGENT variable?
        echo($HTTP_USER_AGENT);
      }
      else {
// Absolutely no identifier was found
        echo("Unknown");
      }
    }
  ?>
 


 
 
47. 如何使用WAP设备发送E-Mail?

在HTML中有一个默认的E-Mail机制:“ mailto:” 。但在WML中不好使,因此E-Mails必须通过WML表单来解决。例如:


     
     

From:


     

To:


     

Subject:


     

Message body:


     


        Send this mail
         
           
           
           
           
         

      

     


  
 

在代码中的http://some.host/mailhandler是一个CGI程序,它是服务端的脚本程序,将提交的表单转换成E-Mail格式并发送出去。
如果想使用一个类似于发信的过程,就需要编辑变量名。另外发送的数据是有限的,长信息可能需要打断。
为了演示它是如何工作的,下面的 PHP 脚本可以用来处理Mail。它将格式化WML页面,告诉用户是否发出信件。在真实的应用中,应该加入检测,例如:E-Mail的合法格式。

// Tell the client that this is a WML deck
    header("Content-type: text/vnd.wap.wml");
    echo("/n");
    echo(" /"/n">http://www.wapforum.org/DTD/wml_1.1.xml/">/n");
// The name of your mail server
    $mailer = "wap.colorline.no";
// Format the from field
    $from = $from." (WAP user at ".$mailer.")";

// Add the from field and some character handling to the extra headers
  $extraheaders = $from."/nContent-Type: text/plain;
charset=iso-8859-1/nContent-Transfer-Encoding: 8bit";

// Start sending out the WML deck
    echo("/n");
    if(mail($to,$subject,$body,$extraheaders))
{// Use PHP's internal mail functionality
// Mail was successfully sent
      echo("/n");
      echo("

Mail was sent successfully

/n");
      echo("/n");
    }
    else {
// The mail could not be sent
      echo("/n"); 
      echo("

Unable to send mail

/n");
      echo("
/n");
    }
    echo("/n");
?>

因为安全性的原因,以上的代码没有演示程序。

48. 可以在模拟器上操作本地的页面,却没有办法访问Internet上的,有什么问题吗?

大多数模拟器和工具都可以浏览Internet、Intranet和本机的页面。但是在访问一些大公司页面的时候,必须通过代理服务器来取得进入Internet的权限。如果必须通过这个代理服务器来取得HTM
L页面,那么你的WAP模拟器也会取得权限来访问Internet。
注意到有些模拟器不支持代理服务器,但是大多数是支持的。在模拟器里面设置这些是很简单的。用户所做的只需要将代理主机的名字、IP地址和端口号输入就可以了。如果没有找到,你可以在 systems/netw
ork 管理器里面设置这些,也可以检查 Netscape/IE的设置。
在某些情况下,代理服务器使用 userid 和 password 来取得进入Internet的权限。有些模拟器支持用户代理服务器,用户应该能告诉模拟器相关的代理配置。
在极少的情况下,使用代理服务器(如Microsoft Proxy Server,)的用户会遇到更多的问题。这个代理服务器只接受一种验证方式(userid/password)。这种验证被称做 NTLM
,并且是某种 MS 的验证方式。几乎很少有模拟器支持这种方式。因此最好是避免使用它,或者让管理员使用“Basic Authentication”方式以避免更多的麻烦。

49. 什么是PUSHing,它是如何工作的?

PUSH被加入到WAP 1.2,而且只在WAP 1.2中才存在。简单地来说,PUSH提供了另外一种从服务器向用户发送数据的方式。PULLing是从客户端请求信息,然后接收它;PUSH意味着服务器可以
向用户发送数据,而不需要用户来请求。
内容或者应用服务器无法向用户代理直接发送数据,必须使用一种叫做Push Proxy 的网关。PPG 是基于Internet的Push Initiator (内容或者应用服务器) 与移动用户之间的。在
Internet一边,使用Push Access Protocol,在移动网络一边使用Push Over-the-Air Protocol。
当前只有 WAP 1.2 开发平台支持 PUSH, 例如 Nokia Toolkit 2.0。 Nokia Toolkit 2.0 only 内部支持PUSHing,意味着用户可以从工具包的界面将消
息推送到模拟器。如果想试着到一个外部的Push Proxy Gateway, 工具包就崩溃了。从readme文件中知道,PUSHing 还没有经过完整的测试。

50. WAP模拟器说text/html不支持,但是用户的MIME设置是正确的,为什么?

当使用服务端的脚本语言,例如ASP、PHP或者Perl,来生成WML输出,或者从HTTP服务器提供WML页面的时候。记住HTTP一般默认的显示是HTML,其MIME类型是text/html。
如果HTTP服务器或者服务器脚本有错误,错误的信息将使用HTML显示,因此微型浏览器是不能显示错误信息的。
一个开发工具/模拟器可以让用户看到从HTTP服务器过来的代码。例如,在Nokia SDK中,这个功能被称做View Source。通过看代码可以知道HTTP服务器到底发送了些什么内容。也可以使用普通
的浏览器来查看任何HTML格式的错误信息。

51. 在哪儿有Visio移动电话的模板库?

目前唯一知道的就是它包含在 Nokia 7110 中。

52. 有没有其他有用的WML内容服务列表?

这里至少有一个。
对于Unix用户, http://pwot.co.uk/wml/中有Thomas Neill (ponder@pwot.co.uk)提供的WML工具,包括WML二进制编译和反编译。
Angus 和 Zygo WAP(angus@z-y-g-o.com)已经开发出了一个Perl工具包。它还在为管道式的WML编译器工作。

53. XML到XSL的转换可以应用到WML和WAP吗?

既然WML实际上是XML,并且XSL将WML转换成其他不同的XML文档,那么问题的答案是显然的:XSL也可以应用到WML。可以参考Luca Passani的文章《WebTechniques》。这个文
章在网络上的地址是:
http://www.webtechniques.com/archives/2000/03/passani/
它推荐看一下叫做《在 Apache下Cocoon计划的实现》这篇文章。“Cocoon 是一个依赖于新的W3C技术(例如DOM,XML,和XSL)框架。Cocoon计划在于改变Wen信息创建,生成和提
供的方式。文档内容、风格和逻辑经常因为个人或者工作组的不同而不同。 Cocoon目标在于将这三层分离,允许三层次之间进行独立的设计,创建和管理,减少相互之间的影响,增加工作的可复用性以及缩短上市的时间
。Web内容的产生大多数是基于HTML的,但是HTML并不能将三者分离开来,混合着各种格式标签,程序逻辑等等。而Cocoon计划将要改变这种情况,允许内容,逻辑和风格相互分离。使用XML来保存,但是使
用XSL来将它们混合。”
基本上来说,Cocoon将解读HTTP头,判断使用的是什么浏览器,然后使用不同的风格来选择正确的页面,使用XSL进行混合。

54. 想让用户只要简单地按下一个按钮就能够转跳到其他卡片而不是通过选择URL,这个可能吗?

不,不可能。

55. 如何避免一个行的中断以便可以在一行中输入多个链接?

在Nokia 7110中,不可能做到这一点,每个链接都占据自己的一行。

1:42 | 添加评论 | 固定链接 | 引用通告 (0) | 记录它 | WAP开发
WAP开发(二)
27. 怎样防止从Cache中读取WML页面?

当WML页面下载到WAP设备后,它将保存在WAP设备内存中一段时间,直到这个时间过期。在这之后,页面将从服务器下载,而不是从WAP设备的缓存读取。这个过程被称做Cache。
但是有些时候不想让页面从缓存中读取,而是从服务器端读取。一个典型的例子就是当服务器的内容不断在更新的时候,通过在HTTP头中加入一定的cache信息,来告诉WAP设备该页面将不存储在缓存中。
可以在服务器端生成HTTP头,或者使用PHP、ASP、Perl或者其他服务端开发语言。这一行不能被包括在页面里,既然是HTTP的信息头,就不是WML元素。
对于静态页面,或许没有使用服务器端脚本语言,许多浏览器支持META标签来控制浏览器的Cache。看本部分的最后的例子。
将下面代码加入到HTTP头中,页面将马上过期:

Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: DD. month YYYY HH:MM:SS GMT
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
第一行告诉微型浏览器,页面已经过期一段时间了。第二行告诉浏览器页面最后一次修改的时间。DD应该换成当天的日期,month YY HH MM SS等等类推。第三行和第四行有同样的效果。告诉浏览器页面不被
Cache(第三行适用于 HTTP 1.1,第四行适用于HTTP 1.0)。
下面的是PHP的一个例子:

// set the correct MIME type
     header("Content-type: text/vnd.wap.wml");
// expires in the past
     header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// Last modified, right now
     header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
// Prevent caching, HTTP/1.1
     header("Cache-Control: no-cache, must-revalidate");
// Prevent caching, HTTP/1.0
     header("Pragma: no-cache");
   ?>

下面是使用WebClasses(VB)的例子。使用"Response.Expires=-1",防止Cache。

 Private Sub WebClass_Start()
      'Set correct MIME type
      Response.ContentType = "text/vnd.wap.wml"
     
      'Make sure no caching
      Response.Expires = -1
      Response.AddHeader "Pragma", "no-cache"
      Response.AddHeader "Cache-Control", "no-cache, must-revalidate"
   
      'Use basicwml(my own) as template
      Set NextItem = basicwml
  End Sub 

这里有一个ASP的例子,同样使用“Response.Expires=-1”防止Cache。

<%
    Response.ContentType = "text/vnd.wap.wml"
    Response.Expires = -1
    Response.AddHeader "Pragma", "no-cache"
    Response.AddHeader "Cache-Control", "no-cache, must-revalidate"
%> 

最后是使用META的例子:


"http://www.wapforum.org/DTD/wml_1.1.xml">
 
   
     
   
   
     

This deck will never be stored in the cache


   
 

下面的页面是在经过86400秒(24 hours)后过期。


"http://www.wapforum.org/DTD/wml_1.1.xml">
 
   
     
   
   
     

This card will live in the cache for a day


   
 

有些浏览器例如:UP.Simulator如果可以通过“返回”达到另外一个卡片,那么它将不会重新装载卡片。为了强制这个更新动作,用户必须在META标签中使用must-revalidate 参数。

28. 如何防止变量被保存在Cache中?

变量保存在Cache中,这样变量还可以再利用。例如当用户返回到上一个输入卡片,他不需要重新输入,只需要改变需要改变的地方。但是在某些情况下这会造成一些问题。例如以WAP聊天系统,有些变量用了一遍又一
遍,但是需要不同的内容。有些浏览器,例如:Nokia 7110,就会存在类似的在该清除的时候无法清除的问题。
在WML中,标签有一个参数叫做newcontext。
当newcontext="true" 时清除所有的变量。但是这样也清除了所有导航的历史记录,这意味着back按钮不再工作。
为了清除变量,可以告诉浏览器将变量设为空:


但是,不是每个时候都有效果。在某些情况下必须使用一个难以想象的方法来清空变量。就是使用 onenterforward 事件。


  
    
    
  


29. 怎么能够知道请求是从WML浏览器来的还是HTML浏览器来的?

既然要利用已经存在的为HTML浏览器编写的代码,就需要知道请求是从HTML浏览器还是从WML浏览器过来的。同样地,如果想重新引导的HTML浏览器直接到相应的HTML文档上,WML浏览器到WML页面上
,以下的PHP代码就可以做到这些。

// Because this script sends out HTTP header information,
// the first characters in the file must be the

// relative URL to your HTML file
   $htmlredirect = "/html/my_htmlpage.html";
// ABSOLUTE URL to your WML file 
   $wmlredirect = "http://wap.mysite.com/wml/my_wmldeck.wml";

   if(strpos(strtoupper($HTTP_ACCEPT),"VND.WAP.WML") > 0)
{// Check whether the browser/gateway says it accepts WML.
     $br = "WML";
   }
   else {
     $browser=substr(trim($HTTP_USER_AGENT),0,4);
     if($browser=="Noki" || // Nokia phones and emulators
        $browser=="Eric" || // Ericsson WAP phones and emulators
        $browser=="WapI" || // Ericsson WapIDE 2.0
        $browser=="MC21" || // Ericsson MC218
        $browser=="AUR " || // Ericsson R320
        $browser=="R380" || // Ericsson R380
        $browser=="UP.B" || // UP.Browser
        $browser=="WinW" || // WinWAP browser
        $browser=="UPG1" || // UP.SDK 4.0
        $browser=="upsi" || // another kind of UP.Browser ??
        $browser=="QWAP" || // unknown QWAPPER browser
        $browser=="Jigs" || // unknown JigSaw browser
        $browser=="Java" || // unknown Java based browser
        $browser=="Alca" || // unknown Alcatel-BE3 browser (UP based?)
        $browser=="MITS" || // unknown Mitsubishi browser
        $browser=="MOT-" || // unknown browser (UP based?)
        $browser=="My S" || // unknown Ericsson devkit browser ?
$browser=="WAPJ" || // Virtual WAPJAG www.wapjag.de
$browser=="fetc" || // fetchpage.cgi Perl script from www.wapcab.de
$browser=="ALAV" || // yet another unknown UP based browser ?
        $browser=="Wapa") // another unknown browser (Web based "Wapalyzer"?)
        {
        $br = "WML";
     }
     else {
       $br = "HTML";
     }
   }

   if($br == "WML") {
// Force the browser to load the WML file instead
    header("302 Moved Temporarily");
    header("Location: ".$wmlredirect);
    exit;
   }
   else {
// Force the browser to load the HTML file instead
    header("302 Moved Temporarily");
    header("Location: ".$htmlredirect);
    exit;
   }
  ?> 

这个判断是在服务端完成的, PHP代码将首先查看网关是否接收text/vnd.wap.vml MIME类型。如果不是,将检测前面的字符,查看是否为WML浏览器。如果不符合,那么就假设为HTML浏览器
。如果有新的WML浏览器,那么ID字符串也要增加。
这个代码基于Robert Whitinger(robert@wapsight.com)的代码,使用了Don Amaro(donamaro.concepcion@nl.unisys.com)提供的列表

注意:由于只需要四个字符串就可以辨别,因此例如:"WapIDE-SDK/2.0;(R320s(Arial))" 可以使用“WapI”来代替是可行的做法,也是足够的。
同样的功能也可以通过ASP来解决。先判断请求的是“/index.wml” 或者 “/index.html” 和所需要的MIME类型。另外以下的脚本辨别的方式和上面不一样。另外还需要网关告诉服务器它能
接收 的text/vnd.wap.wml MIME类型。该例子如下所示:

<%
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
%>
<%Response.ContentType = "text/vnd.wap.wml"%>
<%Response.Flush%>
"http://www.wapforum.org/DTD/wml_1.1.xml">
 
 
 
 
 

 


 
enter
 


 
 
  <%Response.Flush:Response.End%>

30. 如何判断访问者是来自哪个浏览器或者移动电话?

可以通过检查HTTP_USER_AGENT标签来判断。例如试着使用Microsoft Internet Explorer访问一个站点的时候,HTTP_USER_AGENT将返回:Mozilla/4.
0 (compatible;MSIE 5.0; Windows 98);在同样的情况下使用Nokia 7110访问这个站点,HTTP_USER_AGENT就会是:Nokia7110/1.0(04.73
)。据此可以判断用户代理是什么类型的。

31. 可以得到用户代理的电话号码吗?

不可以,除非网关支持这个特点,WAP没有办法知道用户的电话号码。

32. 可以通过WML使得可以用WAP设备进行拨号吗?

WAP的电话功能可以使用Wireless Telephony Application Interface(WTAI)。

例如:

WMLScript: WTAPublic.MakeCall("9287787"); 

但是第一代的WAP设备不支持这个功能。

33. 能够从WAP设备中读取数据吗,例如:电话号码?

这里有一些通过HTTP的信息,但是十分有限。既然只有网关发送过来少量的信息,像WAP设备的号码可能无法读取。同时,在某些国家这还涉及到个人隐私的问题。
基本上丢弃的内容就是WAP网关传送给HTTP服务器的内容。这不同于WAP网关到网关。Phone.com的UP.Link网关是一个最好的例子。因为它在HTTP头中返回一个字符串叫做 UP_X_SUBN
O,里面包含了电话号码。Ericsson网关将传送一个辨别设备用的字符串,但是在明文中没有电话号码。
每次WAP设备向HTTP服务器请求一个URL,WAP网关就会将信息传送给HTTP服务器。
以下的PHP脚本显示了从网关过来的所有HTTP头的信息。可以使用WML浏览器进行测试。(http://wap.colorline.no/clientinfo.html)。其他的例子也可以在下面的UT
L中找到:http://wap.colorline.no/demos.html
第一个部分是取得所有的标准HTTP头信息。第二个部分是提取一个内容。

  header("Content-type: text/vnd.wap.wml");
  echo("/n");
echo(" /"/n/n">http://www.wapforum.org/DTD/wml_1.1.xml/">/n/n");
  echo(" ?>


 
   


              // First part – standard HTTP stuff
        $headers = getallheaders();
        while (list($header, $value) = each($headers)) {
          echo strtoupper($header). ": ". $value. "
/n";       
        }
        // Second part

// IP address of the client side
        echo("REMOTE_ADDR: ".$REMOTE_ADDR. "
/n");
// Port at the client side
        echo("REMOTE_PORT: ".$REMOTE_PORT. "
/n");
// Name of authenticated user
        echo("REMOTE_USER: ".$REMOTE_USER. "
/n");
// Gateway Interface type
        echo("GATEWAY_INTERFACE: ".$GATEWAY_INTERFACE. "
/n");
// Protocol used by the server
        echo("SERVER_PROTOCOL: ".$SERVER_PROTOCOL. "
/n");
// Request Method
        echo("REQUEST_METHOD: ".$REQUEST_METHOD. "
/n");
// Connection type
        echo("HTTP_CONNECTION: ".$HTTP_CONNECTION. "
/n");
// Host it connected via (proxy)
        echo("HTTP_VIA: ".$HTTP_VIA. "
/n");
      ?>
   


 
 
Henrik Gemal (gemal@dk.net)也有一个在线的基于WML的工具BrowserSpy,来显示更多关于HTTP头的信息、服务器环境和用户的浏览器等等。有关这个工具的详细情况可以浏览h
ttp://wap.gemal.dk/
Werner Forkel 提交了一个Perl的脚本,可以显示电话号码(如果有)。可以在以下位置测试:http://wap.colorline.no/wap-faq/apps/subnotest.w
ml,同样也收集在:http://wap.colorline.no/demos.html.
这些程序只适合某个网关。如果要测试其他的网关,可能就显示不出电话号码。因此电话号码不能作为ID号来处理。至少因为不是一个全球的标准。 34. 有没有办法连接到电话号码?

在某些情况下,当在显示了一连串的号码之后,需要中断功能连接到一个电话号码上并拨号。例如:执行一个 dial:12345678 就非常像 mailto: 标签。
越来越多的浏览器都支持这个功能,但还不是所有。Phone.com, Mitsubishi 和 Ericsson 已经在浏览器中集成了这个基于Wireless Telephony Interface
specifications (WTAI)的功能。 WTAI将允许以下的URL将关闭连接并且拨号:

  Make a call to +47-12345678 

Nokia 7110 已经有个功能叫做“Use Number”。它可以通过WML卡片查找一个类似于电话号码的列表,然后用户可以选择进行呼叫。注意用户必须分离这些数字以便它能正常工作。

35. 使用GET或者POST方式能传送多少字符?

使用GET或者POST方式所能传送的字符数目,不同的设备有不同的限制。一个GET通过UTL传送变量,能传送的数据总量比使用POST方式所能传送的数据要小。例如,Nokia 7110似乎对每个GET 
限制在512个字节左右,但是POST最大可以达到一个编译后卡片的大小(约1300字节)。UP.SDK 4.0将GET请求限制在970左右,最大可以达到一个编译后卡片的大小。
显然,卡片有时候保存了要发送给服务器的参数的内容,既然编译后的卡片大小有限制,那么肯定要影响到整个所能传输的数据。
在POST和GET之间没有太多的区别。比如这个没有很好地使用GET的例子。


  


     Send it
    
    

  

下面仍然是一个使用GET的请求,但是使用了来传送参数。这个代码就漂亮多了。既然可以定义为GET,同样也很容易转成POST。


  


     Send it
    
      
    

    

  

直接改为POST:


  


     Send it
    
      
    

    

  

最好是做测试找到到底能传输多少数据。这里有个测试程序: http://wap.colorline.no/wap-faq/apps/putsize.php3。

这个程序也可以在下面的URL中找到:http://wap.colorline.no/demos.html。
该程序将产生一个卡片包含一个变量,里面包含了一定数量的字符X。用户可以选择传输是使用GET还是POST。在传输之后,脚本将要显示接收到的字符个数。
脚本生成一个页面来测试使用GET或者POST方式到底能发送多少个字符:


"http://www.wapforum.org/DTD/wml_1.1.xml">

 
 
 
 
 
 
 
 

 


  GET data
 
  value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
 

 

 


 

36. 如何同HTML站点一样POST/CGI,返回表单数据到服务器?

如果使用:

 

并且使用:

 

就可以POST数据给CGI程序了。

37. POST无法工作是怎么回事?

有很多说POST参数将会丢失的流言,特别是在Nokia 7110。就笔者所知,还没有哪个Nokia 7110有这样的问题。这个问题主要是存在于网关或接收方。
测试显示Nokia SDK 2.18,当使用内建网关的时候,使用POST会出现问题。甚至当method 设置成“POST”的时候,服务器那边还是将POST请求作为 GET。
当使用POST的URL时 ,Nokia SDK 将会崩溃。在某些情况下URL的最后的字符将被删除。
POST Test页面将简单的POST的两个变量叫做“var1”和“var2”来显示整个变量的内容和HTTP头的内容。如果不能看到正确的变量内容,肯定有问题。检查HTTP头中的application
/x-www-form-urlencoded(注意!需要在变量中输入一些内容)。
这个方法解决了Nokia SDK 2.18的问题,可以把它配置到任意的公共网关来测试。笔者推荐使用 wapHQ 网关。
在其他的情况下,POST确实不工作,问题可能是HTTP头在服务器端解释的时候有问题。脚本语言,例如:ASP、Java或是CGI等等都是通过查看在HTTP头中的 application/x-www-f
orm-urlencoded 完全匹配的字符串。在某些情况下字符串可能有附加的数据,例如:charset="utf8" 。既然服务器端不是精确的匹配,它就不会查看HTTP头,因此POST就变量丢失了。

注意这不是浏览器的问题,在HTTP头加入字符集描述,将造成脚本语言方面的错误。
为了检测有关网关或浏览器的问题,仍使用上面的POST Test页面来测试。同样查看application/x-www-form-urlencoded 的输出,检查有没有附加的字符在结尾部分,如果有,
那么这就是服务器端的问题。
解决这个问题的方案很复杂,它随用户使

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章