采集出错:msxml3.dll 错误'80070005' 拒绝访问&系统未找到指定的资源

目录
[隐藏]

一些朋友尤其是经常使用ASP采集程序的朋友一定遇到过这样的错误:
msxml3.dll 错误 '800c0005'
系统未找到指定的资源。

msxml3.dll 错误 ''''80070005''''
拒绝访问。

解决办法:

赋予程序所在文件夹 internet 来宾帐号(IUSR_WEB)可写。

做法:

选择cachefile-属性-安全-添加(IUSR_WEB)-写入

PS:
帐号的名字不一定就是IUSR_WEB,可以在CMD下用Net User查看IUSR开头的那个就是!
所谓的“cachefile”其实就是msxml3.dll这个文件!

其他原因:

网上很多帖子会说是防火墙或UDP站口权限造成的错误,建议打开防火墙等等解决,但是cwitter发现以下这个方法还是很有它的独到之处的,CC来:

采集时出现:

msxml3.dll 错误 '800c0005'
系统未找到指定的资源。
/Admin/Item/Admin_ItemFunction.asp,行166

查了资料:

在运用xmlhttp组件编写程序中,会碰到 “msxml3.dll 错误 '800c0005' 系统未找到指定的资源。” 这种错误,网上对这种错误的产生原因有很多钟解释,大体说是因为防火墙或UDP站口权限造成了,也说了相应的解决办法。其它有时候也未必。其实错误的描述中就说出了主要的原因 “系统未找到指定的资源” 。这种错误都是出现在调用了 xmlhttp 组件的 Open方法,接着再用Send方法后造成的。当open方法的的 url 参数无法访问时,就会造成 8000005 错误。并且一旦产生这种错误,就会导致应用程序终止,无法继续操作。大多说的程序是这样写的:

Function functionName(pararm …)
Dim Http
Set Http=Server.CreateObject(“MSXML2.XMLHTTP.4.0”)
With Http
.open “GET”,HttpUrl,False
.Send
End With
If Http.Readystate<>4 then
Set Http=Nothing
……
Exit function
End if
End Function

大多数的程序都是运用xmlhttp的 Readystate 属性判断从服务器的返回状态。其实这样未必适合,很多时候用ReadyState 属性判断并不能真正检测到程序流程中的错误。当遇到错误的时候,仍然会致使程序终止。其实修改一下上面的代码,完全可以实现跳过程序执行过程中遇到的错误,使程序继续运行。修改代码如下:

Function functionName(pararm …)
Dim Http
Set Http=Server.CreateObject(“MSXML2.XMLHTTP.4.0”)
With Http
.open “GET”,HttpUrl,False
.Send
End With
On Error Resume Next
If Http.Status<>200 then
Set Http=Nothing
……
Exit function
End if
End Function

Send 方法产生错误的时候,ReadyState的值或许为4,但Status的返回值就一定不是200的。呵呵,我经过多次跟踪ReadyState和Status的值得到以前结果。可能会有差错,目前我还没有发现。

希望以上程序解决方案能够帮到你!!如果朋友你有更好的解决方法,请一定告诉我哟。

我是以MSXML2.XMLHTTP.4.0为例说明的程序,也适合其它版本的XMLHTTP组件。想检查的你系统中已经安装了哪些版本的XMLHTTP组件,请到注册表的 HKEY_CLASSES_ROOT 下查找。

根据以上资料,我只做了如下修改,便可以正常采集,无需进行什么安装组件、重起、关闭防火墙等操作:

/Admin/Item/Admin_ItemFunction.asp,行166 附近:

Http.Send()
If Http.Readystate<>4 then

改为

On Error Resume Next
Http.Send()
If Http.Status<>200 then

其他问题二:

昨天在采集某一个网站的时候,采集程序出错了。
是自写的采集程序。
经过搜索以后,查到一些没有用的结果,后来发现,用Msxml2.ServerXMLHTTP替换掉Msxml2.XMLHTTP,问题成功解决。
以下是分析排错过程。
老是采集一段时间就挂了,指定资源下载失败,或者拒绝访问。
后来直接全部是拒绝访问。

一开始,认为,对方服务器做了防采集设置,比如有时间限制之类的。

于是更改程序,原先是直接获取列表页,然后持续循环获得文章列表。改了采集文件结构,
原来是就一个文件,类,数据库连接,数据处理全部在一个文件里,再采集某一篇文章的时候,后天加了一个时间循环。等待5秒的。代码如下
sTime=Timer()
dTime=Timer()-sTime
do while dTime < 5 dTime=Timer()-sTime loop 确实是能等待5秒钟,但是很快就发现,这个循环太过消耗CPU资源,一到这个循环,CPU占用率持续100%,于是马上放弃这个方案。 另做了一个文件。只根据文章URL抓取文章的相关内容并写入数据库,写入完毕后输出自动跳转代码。 核心思想就是用了
这是一个定时跳转的代码,相信大家都很熟悉。
我的原理做法就是,用一开始的文件,抓取所有的文章连接地址,以及相关导航代码,保存到数据库中。
然后用新做的抓取文章内容的程序,读取数据库记录,逐条进行采集。
数据库记录中有一个flag标记,tinyint类型,默认是0,采集成功更新为1,失败更新为2
这样,每次从数据库中读取一条未采集的数据,也就是读取flag=0的数据,进行操作。操作完毕等待5秒跳转到自身。

想法跟思路是很好的。文章URL数据库也采集准备好了,一上采集文章具体内容,又出错了。一直是msxml3.dll 错误 '80070005'
拒绝访问的错误。
那个郁闷,想开一晚上机器,自动采集,破灭。
今天早上来搜索查询资料,查询到的绝大多数都是无用信息。
基本上都是说权限问题。

msxml3.dll 错误 ''''80070005''''

拒绝访问。

解决办法:

赋予程序所在文件夹 internet 来宾帐号(IUSR_WEB)可写。

做法:

选择cachefile-属性-安全-添加(IUSR_WEB)-写入
都是这么说的。莫名其妙的,我的是FAT32的不存在NTFS格式的那种安全权限问题,IIS设置也正常,
我的问题是采集一部分就拒绝访问。肯定不是这个问题。
继续搜索,找到另一个方案说是,用Msxml2.XMLHTTP替换掉Microsoft.XMLHTTP,我本来用的就是Msxml2.XMLHTTP的
继续搜索。找到最终解决方案应该是用Msxml2.ServerXMLHTTP
先前也搜到这个结果,由于大意,没有及时注意到,以下是搜索过程找到的有用的相关资料。

代码如下:

PostUrl=http://www.xxx.com/
Server.ScriptTimeOut=20
Set oXMLHttp = createObject("Microsoft.XMLHTTP")
Call oXMLHttp.Open("get", PostUrl, false)
Call oXMLHttp.Send("")
sHtmlStr = oXMLHttp.responseBody
Set oXMLHttp = nothing

初步判定可能是打开的页面有跳转的原因,解决办法是用
MSXML2.ServerXMLHTTP
替换掉
Microsoft.XMLHTTP
即可解决。

另外在CSDN上找到这么一段代码
ServerURL=PostUrl
Set Mail1 = Server.CreateObject("CDO.Message")
Mail1.CreateMHTMLBody ServerURL,31
AA=Mail1.HTMLBody
Set Mail1 = Nothing
Response.Write AA

试了一下,也可以用,拷过来收藏

<% ' 定义变量 Dim objXmlHttp Dim strHTML '这是Msxml3.0中的一个稳定版本. '使用Msxml2.ServerXMLHTTP,不使用Msxml2.XMLHTTP Set objXmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP") ' 如果你发现以下错误 ' msxml3.dll error '80070005' ' 存取被拒绝. ' 可能是上网时使用了代理产生了错误 ' 使用 proxycfg.exe 工具. : ' ' proxycfg -d ' 检查是否采用了代理上网 ' 同时可以参看这个帖子: http://www.asp101.com/forum/display_message.asp?mid=51841 ' ' 这个版本太旧且不稳定 'Set objXmlHttp = Server.CreateObject("Msxml2.XMLHTTP") ' 现在我们开始发送请求. ' 套用微软的话来讲: 初始化一个请求,并且指定该请求的方法(get,post等等), ' URL, 和权限验证信息(用户名,密码,等等)。 ' 格式: ' .open(bstrMethod, bstrUrl, bAsync, bstrUser, bstrPassword) 'objXmlHttp.open "GET", "http://www.yahoo.com", False objXmlHttp.open "GET", "http://www.yahoo.com", False ' 以直接的方式发送请求出去. objXmlHttp.send ' 打印返回状态: Response.Write "Status: " & objXmlHttp.status & " " _ & objXmlHttp.statusText & "
"

' 获取响应返回的文本.
' 这个对象本身是用来操作XML的,所以具备以下属性:
' responseBody, responseStream, 和 responseXML.
' 但是我们现在只需要文本信息
strHTML = objXmlHttp.responseText

' 但这个对象实例不再使用时,需要清除这个对象实例.
Set objXmlHttp = Nothing

' 现在我们要做的就是显示我们获取到的HTML.
' 首先看浏览器解释的效果
' 然后显示其源码
' 下面的类似

s 和

s只是为了展现获取到的内容,本身不属于获取的内容.
%>

Here's The Page:

<%= strHTML %>

Here's The Code:


<%= Server.HTMLEncode(strHTML) %>

下面是其他关于非采集错误的原因总结及解决方法,网上收集,仅供参考:

原因及解决方案

1、服务器不支持xmlhttp组件
解决:在服务器上安装MSXML以支持XMLHTTP组件

2、msxml3.dll文件损坏或访问该文件权限不足,可能的错误信息如下:
Server 对象 错误 'ASP 0178 : 80070005'
Server.CreateObject 访问错误
/clsZDThief.asp,行 102
检查权限时,对 Server.CreateObject 的调用失败。拒绝对此对象的访问。
解决:
文件损坏:从光盘提取或同版本系统下拷贝msxml3.dll(%windir%system32下)文件进行替换,需要关闭调用些文件的服务,如IIS等
权限不够:%windir%system32msxml3.dll右键-属性-安全,添加Users用户组的读取和运行、读取权限

3、防火墙或杀毒软件禁用了相应的端口(如McafeeISA 2006),可以尝试关闭防火墙或杀毒软件后来确认是否属于此问题
解决:
不同的软件设置不一样,这里以Mcafee封锁msxml3.dll为例,查看访问保护日志有如下信息
[8.5i-windows2003-iis6]2008-5-14 16:08:14 被端口阻挡规则阻挡 c:windowssystem32inetsrvw3wp.exe 通用最大保护:禁止 HTTP 通信 220.181.3.20:80
[8.0i-windows2000-iis5]2006-9-22 8:16:27 被端口阻挡规则阻挡 DLLHOST.EXE(或inetinfo.exe,视'应用程序保护级别'而定) 禁止从万维网上下载 222.*.*.*
知道了原因那么解决起来是很简单的
对于IIS5:
在此规则上添加排除进程'DLLHOST.EXE或inetinfo.exe问题即解决
对于IIS6:
在此规则上添加排除进程'w3wp.exe'问题即解决

4、DNS解析错误
检查网络可否正确进行DNS域名解析

5、IP筛选设置
即是否开放通讯端口,不知MSXML使用哪个端口

6、对方资源失效
比如采集某条信息时,对方该条信息不存在导致程序终止错误,也可能是这种情况。这种错误都是出现在调用了 xmlhttp 组件的 Open方法,接着再用Send方法后造成的。当open方法的的 url 参数无法访问时,就会造成 8000005 错误。并且一旦产生这种错误,就会导致应用程序终止,无法继续操作。
Send 方法产生错误的时候,ReadyState的值或许为4,但Status的返回值就一定不是200的。尝试将程序代码的属性.Readystate=4改为.Status=200试试

7、IE安全选项等级设置过高
将安全等级设成中或低,在受信任网站里回入您要获取的域名

8、重装注册msxml3.dll组件或重装安装
regsvr32 msxml3.dll
下载msxml3.msi安装包:http://www.microsoft.com/downloads/details.aspx?FamilyID=28494391-052b-42ff-9674-f752bdca9582&DisplayLang=zh-cn

点赞 (0)

发表评论

电子邮件地址不会被公开。 必填项已用*标注