vb6用xmlhttp的方法获取网站源代码 -2147024891(80070005)错误

hktkzyz 2014-09-25 11:15:14
Private Function getHtmlStr(strUrl As String) As String
Dim XmlHttp As Object
Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET", strUrl, False
XmlHttp.send
getHtmlStr = StrConv(XmlHttp.ResponseBody, vbUnicode)
Set XmlHttp = Nothing
End Function

我用xmlhttp的方法来获取网站的源代码,可是总是出现 “运行时错误 -2147024891(80070005),拒绝访问” 的错误。
请问如何能解决这个问题。
网站是http://detail.tmall.com/item.htm?id=25854064127

不想用webbrowser,实在太耗资源。
我获取网页源代码的目的是得到网页中商品的图片和其他一些内容。
...全文
1092 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hktkzyz 2014-09-30
  • 打赏
  • 举报
回复
inet先不纠结了,先不用他了,我觉的Carlven2012的msxml2很好用,虽然各个参数都还不太明白,我下来在学习,不过这个是感觉最好用的,我的基础知识积累还不够,需要积累,最后,再非常虚心诚恳的谢过Carlven2012,同时也感谢其他几位朋友,你们对我的帮助,是我学习的最大动力。
Carlven2012 2014-09-29
  • 打赏
  • 举报
回复
引用 8 楼 hktkzyz 的回复:
[quote=引用 7 楼 Carlven2012 的回复:]
太厉害了,这个跳转是怎么得到的呀,真是太崇拜你了。 另外,inet不行吧,我第一开始就是用的inet,只能得到部分代码。[/quote] inet我试过了,可以的呀。 跳转是用"WinHttp.WinHttpRequest.5.1"的getResponseHeader("Location")获得的。
hktkzyz 2014-09-29
  • 打赏
  • 举报
回复
引用 7 楼 Carlven2012 的回复:
太厉害了,这个跳转是怎么得到的呀,真是太崇拜你了。 另外,inet不行吧,我第一开始就是用的inet,只能得到部分代码。
hktkzyz 2014-09-27
  • 打赏
  • 举报
回复
引用 3 楼 Carlven2012 的回复:
我下面这样,好像可以获取,不出错。

Private Sub Command1_Click()
    Command1.Enabled = False
    GetHtmlStr Text1
End Sub

Private Sub GetHtmlStr(strUrl As String)
    Dim xml As Object
    
    Set xml = CreateObject("msxml2.serverxmlhttp")
    xml.Open "GET", strUrl, False
    xml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    xml.setRequestHeader "Accept-Language", "zh-cn"
    xml.setRequestHeader "Accept-Encoding", "gzip, deflate"
    xml.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; SV1; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
    
    xml.send
    Do While xml.readyState <> 4
        DoEvents
    Loop
    Text2 = StrConv(xml.ResponseBody, vbUnicode)
    Set xml = Nothing
    Command1.Enabled = True
End Sub
太棒了,就是我想要的,我看也是使用的get方法,好像原理一样,只是引用的对象不一样,具体参数也不一样。 我在网上搜了好几天,居然都没有见过你这个方法,api那个见过,但是还是喜欢xmlhttp。 能给讲解一下吗,或者给一个相关的链接教程,我补充一下知识。非常非常感谢呀。
Carlven2012 2014-09-27
  • 打赏
  • 举报
回复
Carlven2012 2014-09-27
  • 打赏
  • 举报
回复
引用 5 楼 hktkzyz 的回复:
太棒了,就是我想要的,我看也是使用的get方法,好像原理一样,只是引用的对象不一样,具体参数也不一样。 我在网上搜了好几天,居然都没有见过你这个方法,api那个见过,但是还是喜欢xmlhttp。 能给讲解一下吗,或者给一个相关的链接教程,我补充一下知识。非常非常感谢呀。
因为该页面要跳转几次,所以xmlhttp会老是提示拒绝访问。还有个简单的方法,就是用Inet控件,一句话搞定:

Text2 = Inet1.OpenURL("http://detail.tmall.com/item.htm?id=25854064127")
无·法 2014-09-26
  • 打赏
  • 举报
回复
使用api函数URLDownloadToFile

Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Private Function getHtmlStr2$(strUrl$)
    Const tmpfile As String = "c:\tmp.tmp"
    URLDownloadToFile 0, strUrl, tmpfile, 0, 0
    Do Until FileLen(tmpfile)
        DoEvents
    Loop
    Dim fn%, tmp$
    fn = FreeFile
    Open tmpfile For Binary Access Read As #fn
    tmp = Space(FileLen(tmpfile))
    Get #fn, , tmp
    Close #fn
    getHtmlStr2 = tmp
End Function
Carlven2012 2014-09-26
  • 打赏
  • 举报
回复
我下面这样,好像可以获取,不出错。

Private Sub Command1_Click()
    Command1.Enabled = False
    GetHtmlStr Text1
End Sub

Private Sub GetHtmlStr(strUrl As String)
    Dim xml As Object
    
    Set xml = CreateObject("msxml2.serverxmlhttp")
    xml.Open "GET", strUrl, False
    xml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    xml.setRequestHeader "Accept-Language", "zh-cn"
    xml.setRequestHeader "Accept-Encoding", "gzip, deflate"
    xml.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; SV1; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
    
    xml.send
    Do While xml.readyState <> 4
        DoEvents
    Loop
    Text2 = StrConv(xml.ResponseBody, vbUnicode)
    Set xml = Nothing
    Command1.Enabled = True
End Sub
蒋晟 2014-09-26
  • 打赏
  • 举报
回复
服务器端返回302会出这个问题。
bcrun 2014-09-26
  • 打赏
  • 举报
回复
不知楼上说的方法适合楼主的情况不

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧