基本上,我希望将特定URL的内容(基本上,只是字符串形式的HTML代码)下载到我的VB6字符串变量中。但是,也有一些条件。
我知道URLDownloadToFile函数--但是,这要求您将下载的文件/HTML保存到磁盘上的文件位置,然后才能将其读入字符串变量,这对我来说不是一个选项,我不想这样做。
另一件事是,如果我需要使用外部库,它必须已经随XP和XP以后的所有版本的Windows一起使用,我不能使用要求我发布、打包和分发的控件或库,即使它是免费的,这不是一个选项,我不想这样做。因此,我不能使用MSINET.OCX (Internet )控件的.OpenURL()函数(它只是将内容返回到字符串中),因为它不是随Windows一起附带的。
是否有一种方法可以通过Windows、URLMON或其他预装到或随Windows附带的东西来完成这一任务,或者是在VB6 (SP6)中完全做到这一点?
如果是这样的话,我会喜欢方向,因为即使在googling搜索了一个小时之后,我发现的唯一例子是对URLDownloadToFile的引用(这需要在被ale保存到字符串之前保存在磁盘上)和MsInet.OpenURL (这要求我发布和分发MSINET.OCX,我不能也不想这么做)。
当然,要做到这一点,必须有一种优雅的方法?我可以在VB.NET中做到这一点,而不存在任何问题,但显然没有.NET框架在VB6中的奢侈--有什么想法吗?
更新:
我发现了这一点:然而,http://www.freevbcode.com/ShowCode.asp?ID=1252说显示的函数可能不会返回整个页面,并链接到Microsoft报告或说明这一点的kb文章。而且,我知道这是基于wininet.dll的-我想知道WinInet.dll附带了哪些版本的WinInet.dll?Windows XP及以外?它是与Windows 7和/或Windows 8配套的吗?
发布于 2012-06-11 15:48:41
如果您想使用纯VB,而不使用IE,那么您可以利用VB UserControl -异步属性中很少使用的特性。
创建一个新的UserControl,并将其命名为UrlDownloader。将InvisibleAtRuntime属性设置为True。向其添加以下代码:
Option Explicit
Private Const m_ksProp_Data As String = "Data"
Private m_bAsync As Boolean
Private m_sURL As String
Public Event AsyncReadProgress(ByRef the_abytData() As Byte)
Public Event AsyncReadComplete(ByRef the_abytData() As Byte)
Public Property Let Async(ByVal the_bValue As Boolean)
m_bAsync = the_bValue
End Property
Public Property Get Async() As Boolean
Async = m_bAsync
End Property
Public Property Let URL(ByVal the_sValue As String)
m_sURL = the_sValue
End Property
Public Property Get URL() As String
URL = m_sURL
End Property
Public Sub Download()
UserControl.AsyncRead m_sURL, vbAsyncTypeByteArray, m_ksProp_Data, IIf(m_bAsync, 0&, vbAsyncReadSynchronousDownload)
End Sub
Private Sub UserControl_AsyncReadComplete(AsyncProp As AsyncProperty)
If AsyncProp.PropertyName = m_ksProp_Data Then
RaiseEvent AsyncReadComplete(AsyncProp.Value)
End If
End Sub
Private Sub UserControl_AsyncReadProgress(AsyncProp As AsyncProperty)
If AsyncProp.PropertyName = m_ksProp_Data Then
Select Case AsyncProp.StatusCode
Case vbAsyncStatusCodeBeginDownloadData, vbAsyncStatusCodeDownloadingData, vbAsyncStatusCodeEndDownloadData
RaiseEvent AsyncReadProgress(AsyncProp.Value)
End Select
End If
End Sub若要使用此控件,请将其粘贴到窗体上,并使用以下代码:
Option Explicit
Private Sub Command1_Click()
XDownload1.Async = False
XDownload1.URL = "http://www.google.co.uk"
XDownload1.Download
End Sub
Private Sub XDownload1_AsyncReadProgress(the_abytData() As Byte)
Debug.Print StrConv(the_abytData(), vbUnicode)
End Sub只需说一句,你就可以根据你的内心内容来定制它。它可以判断(使用AyncProp对象)文件是否被缓存,以及其他有用的信息。它甚至有一个特殊的模式,您可以下载GIF,JPG和BMP文件,并将它们作为StdPicture对象返回!
发布于 2012-06-10 14:34:30
几年前,我就是这样使用VB6的:
Private Function GetHTMLSource(ByVal sURL As String) As String
Dim xmlHttp As Object
Set xmlHttp = CreateObject("MSXML2.XmlHttp")
xmlHttp.Open "GET", sURL, False
xmlHttp.send
GetHTMLSource = xmlHttp.responseText
Set xmlHttp = Nothing
End Function发布于 2012-06-10 16:39:00
另一种选择是使用Internet。
Dim ex As InternetExplorer
Dim hd As HTMLDocument
Dim s As String
Set ex = New InternetExplorer
With ex
.Navigate "http://donttrack.us/"
.Visible = 1
Set hd = .Document
s = hd.body.innerText ' assuming you just want the text
's = hd.body.innerHTML ' if you want the HTML
End With编辑:为了上面的早期绑定工作,您需要设置对“”和"Microsoft对象库“(Tools >Reference)的引用。你也可以使用后期绑定,但老实说,我忘了正确的类名是什么;也许某个聪明人会编辑这个答案:-)
https://stackoverflow.com/questions/10968946
复制相似问题