在制作网站的过程中,常常需要用到HTTP来与服务端进行数据交互,主要分为客户端调用和服务端调用。在强类型编程语言(Java、C#等)中,使用 HTTP 是很方便的,因为都有相应的很成熟的类库,也有详细的API文档可查阅。但是古老的 ASP 却并没有什么完整的文档可以参考(至少我没有找到,菜鸟教程和W3不算)。偶尔我会编写一些 ASP 相关的东西,会去了解这些东西,因此,本文特记录下在 ASP 编写的网站中,如何在服务端发起 HTTP 请求。
客户端HTTP调用
客户端一般是在 JavaScript
中使用 XMLHttpRequest
对象进行操作,或者使用 jQuery
类库的 Ajax
函数。相信这部分许多朋友都已经很熟练了,也很简单,就不赘述了。(若有不知道的,建议去菜鸟教程或者W3School上看看)
服务端HTTP调用 ★
ASP 服务端的 HTTP 调用可用如下两个对象:
Msxml2.XMLHTTP
:会自动保存 Cookie, Session 等;Msxml2.ServerXMLHTTP
:不保留任何状态。
可根据实际情况进行选择。
直接上代码,如有疑问,或者代码有误,请留言。
(由于长期使用C#
,所以这里的函数注释使用了C#
的XML注释方式)
'<summary>
' 发起HTTP POST请求。
'</summary>
'<param name="url" type="String"> 要请求的地址。 </param>
'<param name="data" type="String"> HTTP BODY内容。 </param>
'<return> 返回服务器响应字符串 </return>
Function HttpPost(url, data)
Dim http
Set http = Server.CreateObject("Msxml2.ServerXMLHTTP")
With http
.Open "POST", url, false
.setRequestHeader "Content-Length",Len(post_data)
.setRequestHeader "Content-Type","application/x-www-form-urlencoded;charset=UTF-8"
.Send data
End With
HttpPost = BytesToString(http.ResponseBody,"GB2312")
Set http = Nothing
End Function
'<summary>
' 使用指定的编码格式将二进制转换为字符串。
'</summary>
'<param name="bytes" type="String"> 要转换的二进制内容。 </param>
'<return> 返回字符串 </return>
Function BytesToString(bytes, charset)
On Error Resume Next
Dim objstream
Set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1 '指定或返回的数据类型,可选参数为:adTypeBinary =1 adTypeText =2
objstream.mode = 3 '指定或返加模式。
objstream.Open '打开ADODB.Stream对象。Object.Open(Source,\[Mode\],\[Options\],\[UserName\],\[Password\]) 参数说明:Sourece 对像源,可不指定
objstream.Write bytes '将指定的数据装入对像中。Object.Write(Buffer) 参数说明:Buffer 为指定的要写入的内容。
objstream.Position = 0 '指定或返加对像内数据的当前指针。
objstream.Type = 2 '指定或返回的数据类型,可选参数为:adTypeBinary =1 adTypeText =2
objstream.Charset = charset '编码格式
BytesToString = objstream.ReadText '读取指定长度的文本。Object.ReadText(NumChars) 参数说明:NumChars 为指定的要读取的长度,不指定则读取全部。
objstream.Close '关闭ADODB.Stream对象
Set objstream = Nothing
End Function
'<summary>
' 使用指定的编码格式将二进制转换为字符串。
'</summary>
'<param name="bytes" type="String"> 要转换的二进制内容。 </param>
'<return> 返回字符串 </return>
Function StringToBytes(input, charset)
On Error Resume Next
Dim objstream
Set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 2 '指定或返回的数据类型,可选参数为:adTypeBinary =1 adTypeText =2
objstream.mode = 3 '指定或返加模式。
objstream.Open '打开ADODB.Stream对象。Object.Open(Source,\[Mode\],\[Options\],\[UserName\],\[Password\]) 参数说明:Sourece 对像源,可不指定
objstream.WriteText input '将指定的文本字符串写入 Stream 对象。Object.WriteText(Data, Options) 参数说明:Data String 值,包含要写入的字符文本。Options 可选。StreamWriteEnum 值,指定是否在指定字符串的结尾写入分行符字符。
objstream.Position = 0 '指定或返加对像内数据的当前指针。
objstream.Type = 1 '指定或返回的数据类型,可选参数为:adTypeBinary =1 adTypeText =2
objstream.Charset = charset '编码格式
StringToBytes = objstream.Read '从二进制 Stream 对象读取指定的字节数。Object.Read(NumBytes) 参数说明:NumBytes 可选。Long 值,指定要从文件或 StreamReadEnum 值 adReadAll(默认值)读取的字节数。
objstream.Close '关闭ADODB.Stream对象
Set objstream =Nothing
End Function
其他
- ASP 中主要使用
VBScript
和服务端 JavaScript
两种语言,建议尽量使用 VBScript,因此本人所有 ASP 系列的文章均是使用 VBScript ,特此说明。 - 文中使用到了另一个对象
ADODB.Stream
,请参考我的另一篇文章《ASP之ADODB.Stream》
来源:oschina
链接:https://my.oschina.net/liudonghui/blog/3161990