精品推荐
Wap开发FAQ大全
日期:2008年3月16日 作者: 查看:[大字体
中字体 小字体 ]
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 的输出,检查有没有附加的字符在结尾部分,如果有, 那么这就是服务器端的问题。 解决这个问题的方案很复杂,它随用户使用的脚本描述语言不同而不同,而且需要操作原代码。简单地说,解决方案就是需要人工读取HTTP头,不要使用脚本语言已经写好的读取方式。 这里有一个用ASP编写的解决方法。它显示了如何在POST中抓取数据。用户需要从二进制数据中发现需要的变量。 Dim lngToalByteCount Dim vntRequestData lngTotalByteCount = Request.TotalBytes vntRequestData = Request.BinaryRead(lngTotalByteCount) 全部的代码,就应该像下面的代码: <%@ Language=VBScript %> <% Dim Temp, i, sPost, sWMLDeck 'Converts the binary data to a string. For i = 1 To Request.TotalBytes Temp = Request.BinaryRead(1) sPost = sPost & Chr(AscB(Temp)) Next 'Parses out the values of the POSTED variables (in this 'example myvar1 and myvar2). Dim sVar1, sVar2 sVar1 = getVar("myvar1", sPost) sVar2 = getVar("myvar2", sPost) 'Writes the WML Deck displaying the POSTED Variables sWMLDeck = "<?xml version=""1.0""?>" & vbCrLf sWMLDeck = sWMLDeck & "<!DOCTYPE wml PUBLIC ""-//WAPFORUM//DTD WML 1.1//EN"" " sWMLDeck = sWMLDeck & """http://www.wapforum.org/DTD/wml_1.1.xml"">" & vbCrLf sWMLDeck = sWMLDeck & vbCrLf & "<wml>" & vbCrLf & vbTab sWMLDeck = sWMLDeck & "<card id=""main"" title=""POST TEST"">" & vbCrLf sWMLDeck = sWMLDeck & vbTab & vbTab & "<p>" & vbCrLf sWMLDeck = sWMLDeck & vbTab & vbTab & vbTab & "myVar1: " & sVar1 & "<br/>" & vbCrLf sWMLDeck = sWMLDeck & vbTab & vbTab & vbTab & "myVar2: " & sVar2 & vbCrLf sWMLDeck = sWMLDeck & vbTab & vbTab & "</p>" & vbCrLf & vbTab
复制本页网址和标题,发送给你QQ/Msn的好友一起分享
上一篇:黑客盯上安全软件 Windows可以暂时松口气
下一篇:教你识别翻新笔记本电脑
相关文章:
相关软件: