直接将URL内容下载到字符串(VB6)而不保存到磁盘

Erx*_*der 3 vb6 api winapi vba wininet

基本上,我想将特定URL的内容(基本上只是字符串形式的HTML代码)下载到我的VB6 String变量中.但是,有一些条件.

我知道URLDownloadToFile函数 - 但是,这需要您将下载的文件/ HTML保存到磁盘上的文件位置,然后才能将其读入String变量,这对我来说不是一个选项,我不想这样做.

另一件事是,如果我需要使用外部库,它必须已经从XP及以后的所有版本的Windows附带,我不能使用我需要发送,打包和分发的控件或库,即使它是免费的,这不是一个选项,我不想这样做.因此,我不能使用MSINET.OCX(Internet传输)控件的.OpenURL()函数(它只是将内容返回到字符串中),因为它没有Windows.

有没有办法能够使用Windows API,URLMON或其他预先加载到Windows中或在Windows中附带的内容,或者完全在VB6(SP6)中执行此操作的方法?

如果是这样,我会很感激方向,因为即使经过一小时的谷歌搜索,我发现的唯一例子是对URLDownloadToFile的引用(需要在放入磁盘之前保存在磁盘上)和MsInet.OpenURL(需要我运送和分发MSINET.OCX,我不能也不想这样做.

当然必须有一种优雅的方式才能做到这一点?我可以在没有问题的VB.NET中做到这一点,但显然没有VB6中.NET框架的奢侈 - 任何想法?

更新:

我发现了这个:http://www.freevbcode.com/ShowCode.asp? ID = 1252然而它说显示的功能可能不会返回整个页面并链接到Microsoft错误报告或解释这个的kb文章.此外,我知道这是基于wininet.dll - 我想知道哪些版本的Windows WinInet.dll打包?Windows XP及更高版本?它是否附带Windows 7和/或Windows 8?

Ant*_*ony 10

这就是我几年前用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
Run Code Online (Sandbox Code Playgroud)


Mar*_*haw 3

如果您想使用纯 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
Run Code Online (Sandbox Code Playgroud)

要使用此控件,请将其粘贴到窗体上并使用以下代码:

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
Run Code Online (Sandbox Code Playgroud)

可以说,您可以根据自己的喜好进行定制。它可以告诉(使用 AyncProp 对象)文件是否被缓存,以及其他有用的信息。它甚至有一个特殊的模式,您可以在其中下载 GIF、JPG 和 BMP 文件并将它们作为 StdPicture 对象返回!