-->

下载网址内容直接进入字符串(VB6)不保存到磁盘(Download URL Contents Dir

2019-09-17 23:50发布

基本上,我想一个特定的URL(基本上,只是在一个字符串形式的HTML代码)的内容下载到我的VB6字符串变量。 不过,也有一定的条件。

我知道的URLDownloadToFile功能 - 但是,这需要你下载的文件/ HTML保存到磁盘上的文件位置,然后才能读入一个字符串变量,这不是我的选择,我不希望这样做。

另一件事是,如果我需要使用一个外部库,它必须已经配备了从XP所有版本的Windows,并起,若为自由故,我不能用,我需要运送,包装,甚至分发控制或库,这是不是一种选择,我不希望这样做。 所以,我不能使用MSINET.OCX(Internet传输)控制的.OpenURL()函数(只是返回内容转换为字符串),因为它没有窗户。

有没有一种方法能够与Windows的API,URLMON还是其他什么东西被预先加载到或自带的Windows,还是有办法做到这一点在VB6(SP6)完全做到这一点?

如果是的话,我将不胜感激方向,因为即使谷歌搜索一小时后,我发现的唯一例子是URLDownloadToFile和MsInet.OpenURL(这要求(即ALE,将它放在字符串之前这需要在磁盘上的保存)引用我船和分发MSINET.OCX,我不能和不想做的)。

当然也一定是一个优雅的方式来做到这一点? 我能做到这一点在VB.NET没有问题,但显然不具备.NET框架中VB6的奢侈品 - 任何想法?

更新:

我发现这一点: http://www.freevbcode.com/ShowCode.asp?ID=1252但是它说,显示的功能可能不是整个页面和链接返回到Microsoft错误报告或知识库文章解释这一点。 另外,我明白这是基于关闭的wininet.dll - 我想知道的Windows版本做的wininet.dll来包装用? Windows XP中和超越? 它配备了Windows 7和/或Windows 8?

Answer 1:

如果你想用纯VB,并没有IE要做到这一点,那么你可以采取的VB用户控件的一个很少使用的功能优势 - 异步特性。

创建一个新的用户控件,并调用它像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对象特殊模式!



Answer 2:

这就是我如何与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


Answer 3:

一种选择是使用Internet Explorer。

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 Internet控制”和“Microsoft HTML对象库”(工具>引用)。 你也可以使用后期绑定,但说实话,我忘了适当的类名是什么; 也许有人会智能编辑这个答案:-)



文章来源: Download URL Contents Directly into String (VB6) WITHOUT Saving to Disk