ASP 服务端 HTTP 的使用

二次信任 提交于 2020-02-25 17:13:32

在制作网站的过程中,常常需要用到HTTP来与服务端进行数据交互,主要分为客户端调用和服务端调用。在强类型编程语言(Java、C#等)中,使用 HTTP 是很方便的,因为都有相应的很成熟的类库,也有详细的API文档可查阅。但是古老的 ASP 却并没有什么完整的文档可以参考(至少我没有找到,菜鸟教程和W3不算)。偶尔我会编写一些 ASP 相关的东西,会去了解这些东西,因此,本文特记录下在 ASP 编写的网站中,如何在服务端发起 HTTP 请求。

客户端HTTP调用

客户端一般是在 JavaScript 中使用 XMLHttpRequest 对象进行操作,或者使用 jQuery 类库的 Ajax 函数。相信这部分许多朋友都已经很熟练了,也很简单,就不赘述了。(若有不知道的,建议去菜鸟教程或者W3School上看看)

服务端HTTP调用 ★

ASP 服务端的 HTTP 调用可用如下两个对象:

  1. Msxml2.XMLHTTP :会自动保存 Cookie, Session 等;
  2. 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》
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!