« 上一篇下一篇 »

MSXML2.serverXMLHTTP和MSXML2.XMLHTTP的区别

 

MSXML2.serverXMLHTTP 和 MSXML2.XMLHTTP在做一个垃圾站采集的时候遇到问题,用风讯 4.0采集到一定数目的时候总是提示 “出现一个意外错误: ”Send””,查看function.asp代码,发现问题应该是出在 MSXML2.XMLHTTP上,而且应该是win2003下容易出现。这种情况一般重启IIS,或者站点文件重置一下权限就可以解决。毫无疑问这种解决办法对大多数站长不适应,也不是我们的态度。
在网上查了查资料,发现出现这种问题的很多,不过都没有解决。风讯论坛上有一个提问的,没有答案。后来我试着将 MSXML2.XMLHTTP 在config2.asp 中修改为 MSXML2.serverXMLHTTP,BINGO!而且微软的文档也显示,不建议在服务器上使用 MSXML2.XMLHTTP,好像是因为会出现占用资源过高的情况吧。

XMLHTTP 为客户端应用程序而设计,并依赖于基于 Microsoft Win32 Internet (WinInet) 而构建的 URLMon。ServerXMLHTTP 为服务器应用程序而设计,并依赖于新的 HTTP 客户端堆栈 WinHTTP。ServerXMLHTTP 提供了可靠性和安全性,并且是服务器安全的。有关更多信息,请参见 MSXML 软件开发工具包 (SDK) 文档。

本文回答有关 ServerXMLHTTP 对象的一些常见问题。 
更多信息
1. 什么是 ServerXMLHTTP?

ServerXMLHTTP 为不同 Web 服务器之间的服务器安全 HTTP 访问提供方法和属性。您可以使用此对象在不同的 Web 服务器之间交换 XML 数据。


2. 如何安装 ServerXMLHTTP?

ServerXMLHTTP 随 Microsoft XML Parser (MSXML) 版本 3.0 或更高版本提供。您可以从以下 Microsoft Developer Network (MSDN) 网站下载并安装 MSXML 3.0: 
upload/2012/1/201201112133021365.gif"
myHttp.saveimage "myfile.gif"
'为防止xhttp卡死的情况,使用超时,错误处理
dim sHtmlcode,iStep
myHttp.URL="http://www.wodejingyan.com"
sHtmlcode=myHttp.html
iStep=0
do while myHttp.xhttpError=""
htm = htm&("ERROR: AGAIN!<br />")
sHtmlcode=myHttp.html
iStep=iStep 1
if iStep=1 then
htm = htm&("ERROR:OVER!<hr />")
exit do
end if
loop
htm = htm&(sHtmlcode)
set myHttp=nothing

'--------------------------------------------------------------------
Class xhttp
private cset,sUrl,sError
Private Sub Class_Initialize()
'cset="UTF-8"
cset="GB2312"
sError=""
end sub

Private Sub Class_Terminate()
End Sub

Public Property LET URL(theurl)
sUrl=theurl
end property
public property GET BasePath()
BasePath=mid(sUrl,1,InStrRev(sUrl,"/")-1)
end property
public property GET FileName()
FileName=mid(sUrl,InStrRev(sUrl,"/") 1)
end property
public property GET Html()
Html=BytesToBstr(getBody(sUrl))
end property

public property GET xhttpError()
xhttpError=sError
end property

private Function BytesToBstr(body)
on error resume next
'Cset:GB2312 UTF-8
dim objstream 
set objstream = Server.CreateObject("adodb.stream") 
with objstream
.Type = 1 '
.Mode = 3 '
.Open     
.Write body '
.Position = 0 '
.Type = 2 '
.Charset = Cset '
BytesToBstr = .ReadText '
.Close 
end with
set objstream = nothing 
End Function 

private function getBody(surl)
on error resume next
dim xmlHttp
'Set xmlHttp=server.createobject("Msxml2.XMLHTTP.4.0")
'set xmlHttp=server.createobject("Microsoft.XMLHTTP")
set xmlHttp=server.createobject("MSXML2.ServerXMLHTTP")
xmlHttp.setTimeouts 10000,10000,10000,30000
xmlHttp.open "GET",surl,false
xmlHttp.send
if xmlHttp.readystate=4 then 
'if xmlHttp.status=200 then
   getBody=xmlhttp.responsebody
'end if
   else
   getBody=""
end if

if Err.Number<>0 then 
sError=Err.Number
Err.clear
else
sError=""
end if
set xmlHttp=nothing
end function

Public function saveimage(tofile)
on error resume next
dim objStream,imgs
imgs=getBody(sUrl)
Set objStream = Server.CreateObject("ADODB.Stream")
with objStream
.Type =1
.Open
.write imgs
.SaveToFile server.mappath(tofile),2
.Close()
end with
set objstream=nothing
end function
end class
%>

Leave a Comment

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。