作者:tuitu | 来源:互联网 | 2023-05-25 13:16
一、使用步骤:
1、创建XMLHTTP对象 //需MSXML4.0支持
2、打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等。客户端通过Open命令打开与服务端的服务网页的连接。与普
通HTTP指令传送一样,可以用"GET"方法或"POST"方法指向服务端的服务网页。
3、发送指令。
4、等待并接收服务端返回的处理结果。
5、释放XMLHTTP对象
二、XMLHTTP方法:
Open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword )
bstrMethod: 数据传送方式,即GET或POST。
bstrUrl: 服务网页的URL。
varAsync: 是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。用中一般将其置为False,即异步执行。
bstrUser: 用户名,可省略。
bstrPassword:用户口令,可省略。
Send(varBody )
varBody:指令集。可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。也可以省略,让指令通过Open方法的URL参数代入。
setRequestHeader( bstrHeader, bstrvalue )
bstrHeader:HTTP 头(header)
bstrvalue: HTTP 头(header)的值
如果Open方法定义为POST,可以定义表单方式上传:
xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded")
三、XMLHTTP属性:
onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。
responseBody: 结果返回为无符号整数数组。
responseStream: 结果返回为IStream流。
responseText: 结果返回为字符串。
responseXML: 结果返回为XML格式数据。
通过responseBody属性获得的内容需要下面这个函数转换为正常字符串,否则是乱码:
Function bytes2BSTR(arrBytes)
strReturn = ""
arrBytes = CStr(arrBytes)
For i = 1 To LenB(arrBytes)
ThisCharCode = AscB(MidB(arrBytes, i, 1))
If ThisCharCode <&H80 Then
strReturn &#61; strReturn & Chr(ThisCharCode)
Else
NextCharCode &#61; AscB(MidB(arrBytes, i&#43;1, 1))
strReturn &#61; strReturn & Chr(CLng(ThisCharCode) * &H100 &#43; CInt(NextCharCode))
i &#61; i &#43; 1
End If
Next
bytes2BSTR &#61; strReturn
End Function
四、示例&#xff1a;
以下是代码片段&#xff1a;
< script language&#61;"Javascript" >
function getDatal(url){
var xmlhttp &#61; new ActiveXObject("MSXML2.XMLHTTP.4.0");//创建XMLHTTPRequest对象&#xff0c;需MSXML4.0支持
["MSXML2.XMLHTTP.4.0","MSXML2.DOMDocument.4.0"]
xmlhttp.open("GET",url,false,"",""); //使用HTTP GET初始化HTTP请求
xmlhttp.send(""); //发送HTTP请求并获取HTTP响应
return xmlhttp.responseXML; //获取XML文档
}
常见问题&#xff1a;
msxml3.dll 错误 &#39;80070005&#39; 拒绝访问。 代码如下&#xff1a;
PostUrl&#61;http://www.exponow.cn/
Server.ScriptTimeOut&#61;20
Set oXMLHttp &#61; createObject("Microsoft.XMLHTTP")
Call oXMLHttp.Open("get", PostUrl, false)
Call oXMLHttp.Send("")
sHtmlStr &#61; oXMLHttp.responseBody
Set oXMLHttp &#61; nothing
初步判定可能是打开的页面有跳转的原因&#xff0c;解决办法是用
MSXML2.ServerXMLHTTP
替换掉
Microsoft.XMLHTTP
即可解决。
另外在CSDN上找到这么一段代码
PostUrl&#61;"http://www.exponow.cn/"
ServerURL&#61;PostUrl
Set Mail1 &#61; Server.CreateObject("CDO.Message")
Mail1.CreateMHTMLBody ServerURL,31
AA&#61;Mail1.HTMLBody
Set Mail1 &#61; Nothing
Response.Write AA
试了一下&#xff0c;也可以用&#xff0c;拷过来收藏
GET与POST方法的区别&#xff1a;
什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别.
1、 get是把参数数据队列加到提交表单的ACTION属性所指的URL中&#xff0c;值和表单内各个字段一一对应&#xff0c;在URL中可以看到。post是通过HTTP post机制&#xff0c;将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
2、 对于get方式&#xff0c;服务器端用Request.QueryString获取变量的值&#xff0c;对于post方式&#xff0c;服务器端用Request.Form获取提交的数据。两种方式的参数都可以用Request来获得。
3、get传送的数据量较小&#xff0c;不能大于256KB。post传送的数据量最大为4M&#xff0c;一般被默认为不受限制。但理论上&#xff0c;因服务器的不同而异.
4、get安全性非常低&#xff0c;post安全性较高。
5、 跟是一样的&#xff0c;也就是说&#xff0c;method为get时action页面后边带的参数列表会被忽视&#xff1b;而跟是不一样的。
另外
Get请求有如下特性&#xff1a;它会将数据添加到URL中&#xff0c;通过这种方式传递到服务器&#xff0c;通常利用一个问号&#xff1f;代表URL地址的结尾与数据参数的开端&#xff0c;后面的参数每一个数据参数以“名称&#61;值”的形式出现&#xff0c;参数与参数之间利用一个连接符&来区分。
Post请求有如下特性&#xff1a;数据是放在HTTP主体中的&#xff0c;其组织方式不只一种&#xff0c;有&连接方式&#xff0c;也有分割符方式&#xff0c;可隐藏参数&#xff0c;传递大批数据&#xff0c;比较方便。
通过以上的说明,现在我们大致了解了什么时候用get什么时候用post方式了吧,对!当我们在提交表单的时候我们通常用post方式,当我们要传送一个较大的数据文件时,需要用post。当传递的值只需用参数方式(这个值不大于256KB)的时候,用get方式即可。
现在我们再看看通过URL发送请求时&#xff0c;get方式和post方式的区别。用下面的例子可以很容易的看到同样的数据通过GET和POST来发送的区别, 发送的数据是 username&#61;张三 :
GET 方式, 浏览器键入 http://localhost?username&#61;张三
GET /?username&#61;%E5%BC%A0%E4%B8%89 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Host: localhost
Connection: Keep-Alive
POST 方式:
POST / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Host: localhost
Content-Length: 28
Connection: Keep-Alive
username&#61;%E5%BC%A0%E4%B8%89
区别就是一个在 URL 请求里面附带了表单参数和值, 一个是在 HTTP 请求的消息实体中。
比较一下上面的两段文字, 我们会发现 GET 方式把表单内容放在前面的请求头中, 而 POST 则把这些内容放在请求的主体中了, 同时 POST 中把请求的 Content-Type 头设置为 application/x-www-form-urlencoded. 而发送的正文都是一样的, 可以这样来构造一个表单提交正文:
encodeURIComponent(arg1)&#61;encodeURIComponent(value1)&encodeURIComponent(arg2)&#61;encodeURIComponent(value2)&.....
注: encodeURIComponent 返回一个包含了 charstring 内容的新的 String 对象&#xff08;Unicode 格式&#xff09;&#xff0c; 所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替&#xff0c;其中 xx 等于表示该字符的十六进制数。 例如&#xff0c;空格返回的是 "%20" 。 字符的值大于 255 的用 %uxxxx 格式存储。参见 Javascript 的 encodeURIComponent() 方法.
在了解了上面的内容后我们现在用ajax的XMLHttpRequest对象向服务器分别用GET和POST方式发送一些数据。
GET 方式
var postContent &#61;"name&#61;" &#43; encodeURIComponent("xiaocheng") &#43; "&email&#61;" &#43; encodeURIComponent("xiaochengf_21&#64;yahoo.com.cn");
xmlhttp.open("GET", "somepage" &#43; "?" &#43; postContent, true);
xmlhttp.send(null);
POST 方式
var postContent &#61;"name&#61;" &#43; encodeURIComponent("xiaocheng") &#43; "&email&#61;" &#43; encodeURIComponent("xiaochengf_21&#64;yahoo.com.cn");
xmlhttp.open("POST", "somepage", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//xmlhttp.setRequestHeader("Content-Type", "text/xml"); //如果发送的是一个xml文件
xmlhttp.send(postContent);