为了检测有关网关或浏览器的问题,仍使用上面的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
sWMLDeck = sWMLDeck & "</card>" & vbCrLf & ">/wml>"
Response.ContentType = "text/vnd.wap.wml"
Response.Write(sWMLDeck)
'Quick function for picking out the values of the POSTed variables.
'sKey is the variable name, sRaw is the POST string.
Private Function getVar(sKey, sRaw)
Dim sRetVal
If InStr(sRaw, sKey) Then
sRetVal = Mid(sRaw, InStr(sRaw, sKey) + Len(sKey) + 1)
If InStr(sRetVal, "&") Then
sRetVal = Mid(sRetVal, 1, InStr(sRetVal, "&") - 1)
End If
End If
getVar = sRetVal
End Function
%>
38. 为什么META标签不工作?
浏览器不支持默认的meta标签,例如:
<meta http-equiv="refresh" content="1;http://somewhere.com/">
虽然有少量网关支持非常有限的META标记。但是测试显示,如果使用了它们,网关就会出问题。例如某网关不支持普通的HTTP Cache控制,如果要实现Cache控制只好使用特殊的META标记。显然从其他
网关来的用户就可能不支持这个META。注意:不要使用META tags。肯定有其他的方式来完成你的想法。
最常使用的META是:
<meta http-equiv="refresh" content="1;http://somewhere.com/">
这个告诉浏览器重新装入指定的WML页面。WML中已经包含了一个<ontimer>。
39. 为什么服务器接收不到用户发送的参数?
用户输入的参数或者其他参数可以像在HTML中一样通过提交方式发送到服务器。在HTML中这个是<FORM>,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就根本没有空格。