XMLHTTP 是客户端模拟浏览器操作的一个对象,下面是通过示例表示使用方法

Set xmlHttp = CreateObject("Msxml2.ServerXMLHTTP")

xmlHttp.open "POST","http://domain/login.asp",False     'POST方法用同步方式打开链接,同步是指等待服务器返回全部内容后再进行下一步

xmlHttp.setRequestHeader "Content-Type","application/x-www-form-urlencoded"        'POST提交表单前需要加这段

xmlHttp.send "user=" & user &"&password=" & password    '提交参数,如果参数里有中文,必须首先把中文转换成URL编码

xmlHttp.open "GET","http://domain/logout.asp",False     'GET方法打开链接

xmlHttp.send

status = xmlHttp.status                                'xmlHttp.status为返回代码

content = bytes2BSTR(xmlHttp.responseBody)             '返回的内容   

Set xmlHttp = Nothing

-------------------------------------------------------

注意:

xmlhttp会缓存页面内容,当向同一个URL多次提交数据时,浏览器可能会不向服务器发送信息,直接返回缓存中的内容,导致某些问题

可以在URL后面随便加一个参数避免缓存问题

xmlHttp.open "POST","http://domain/login.asp?"&radomvalue,False        'radomvalue设置为一个随机的值

也可以在open方法之后设置

xmlhttp.setRequestHeader "If-Modified-Since", "0"

这样也可以避免缓存,而且不必修改请求的链接

xmlHttp的超时时间默认为1小时,如果要打开的服务器响应很慢,会等待很长时间,持续占用很高的CPU,可以用setTimeouts来设置

这个方法Msxml2.ServerXMLHTTP有但Msxml2.XMLHTTP没有,设置方法如下

xmlHttp.setTimeouts resolveTimeout,connectTimeout,sendTimeout,receiveTimeout

resolveTimeout = 3000   '解析DNS名字的超时时间,3秒

connectTimeout = 3000   '建立Winsock连接的超时时间,3秒

sendTimeout = 3000      '发送数据的超时时间,3秒

receiveTimeout = 10000  '接收response的超时时间,10秒

-------------------------------------------------------

Function bytes2BSTR(vIn)                                '二进制转字符

    strReturn = ""

    For i = 1 To LenB(vIn)

        ThisCharCode = AscB(MidB(vIn,i,1))

        If ThisCharCode < &H80 Then

            strReturn = strReturn & Chr(ThisCharCode)

        Else

            NextCharCode = AscB(MidB(vIn,i+1,1))

            strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))

            i = i + 1

        End If

    Next

    bytes2BSTR = strReturn

End Function

Public Function URLEncode(strURL)                                '中文URL编码

Dim I

Dim tempStr

For I = 1 To Len(strURL)

    If Asc(Mid(strURL, I, 1)) < 0 Then

       tempStr = "%" & Right(CStr(Hex(Asc(Mid(strURL, I, 1)))), 2)

       tempStr = "%" & Left(CStr(Hex(Asc(Mid(strURL, I, 1)))), Len(CStr(Hex(Asc(Mid(strURL, I, 1))))) - 2) & tempStr

       URLEncode = URLEncode & tempStr

    ElseIf (Asc(Mid(strURL, I, 1)) >= 65 And Asc(Mid(strURL, I, 1)) <= 90) Or (Asc(Mid(strURL, I, 1)) >= 97 And Asc(Mid(strURL, I, 1)) <= 122) Then

       URLEncode = URLEncode & Mid(strURL, I, 1)

    Else

       URLEncode = URLEncode & "%" & Hex(Asc(Mid(strURL, I, 1)))

    End If

Next

End Function

Public Function URLDecode(strURL)                                '中文URL解码

Dim I

If InStr(strURL, "%") = 0 Then URLDecode = strURL: Exit Function

For I = 1 To Len(strURL)

    If Mid(strURL, I, 1) = "%" Then

       If eval("&H" & Mid(strURL, I + 1, 2)) > 127 Then

          URLDecode = URLDecode & Chr(eval("&H" & Mid(strURL, I + 1, 2) & Mid(strURL, I + 4, 2)))

          I = I + 5

       Else

          URLDecode = URLDecode & Chr(eval("&H" & Mid(strURL, I + 1, 2)))

          I = I + 2

       End If

    Else

       URLDecode = URLDecode & Mid(strURL, I, 1)

    End If

03-15 07:01