【发布时间】:2012-06-13 16:47:12
【问题描述】:
基本上,我想将特定 URL 的内容(基本上,只是字符串形式的 HTML 代码)下载到我的 VB6 字符串变量中。但是,有一些条件。
我知道 URLDownloadToFile 函数 - 但是,这需要您将下载的文件/HTML 保存到磁盘上的文件位置,然后才能将其读入字符串变量,这对我来说不是一个选项,我不想要这样做。
另一件事是,如果我需要使用外部库,它必须已经从 XP 及更高版本的所有 Windows 版本中提供,我不能使用我需要运送、打包和分发的控件或库,即使它是免费的,这不是一个选项,我不想这样做。因此,我不能使用 MSINET.OCX(Internet 传输)控件的 .OpenURL() 函数(它只是将内容返回到字符串中),因为它不随 Windows 提供。
有没有办法通过 Windows API、URLMON 或其他预加载到或随 Windows 提供的东西来做到这一点,或者完全在 VB6 (SP6) 中做到这一点?
如果是这样,我将不胜感激,因为即使经过一小时的谷歌搜索,我发现的唯一示例是对 URLDownloadToFile 的引用(这需要在将啤酒放入字符串之前保存在磁盘上)和 MsInet.OpenURL(这要求我发布和分发 MSINET.OCX,我不能也不想这样做)。
肯定有一种优雅的方式可以做到这一点吗?我可以在 VB.NET 中毫无问题地做到这一点,但显然没有 VB6 中的 .NET 框架的奢华——有什么想法吗?
更新:
我发现了这个:http://www.freevbcode.com/ShowCode.asp?ID=1252 但是它说显示的功能可能不会返回整个 页面和指向 Microsoft 错误报告或 kb 文章的链接 这。另外,我知道这是基于 wininet.dll - 我是 想知道 WinInet.dll 打包了哪些版本的 Windows 和? Windows XP 及更高版本?它是否与 Windows 7 和/或 Windows 一起提供 8?
【问题讨论】:
-
您所链接的代码是针对互联网传输控制中存在的错误的修复;你可以使用它。 (support.microsoft.com/kb/232194) 代码使用的 wininet 堆栈是核心操作系统组件,存在于 Windows 2000 及更高版本中。 (谷歌用于 InternetReadFile 的 msdn 页面,底部会有支持的操作系统版本列表)
-
您可以使用 MSXML2.XMLHTTP 执行此操作,只需向 URL 发出 GET 请求,然后将 XMLHTTP.responseText 保存到 String 变量中。
-
内部的AsyncRead方法可用,还有WinHTTP。无需注册的 COM 消除了与部署简单性相关的大多数问题。
-
我认为没有理由不使用 Internet 传输控件,但还有其他选择,例如致电 WinINet directly。
-
@Bob Riemersma 请问,什么是Reg-Free COM?听起来很有趣。
标签: api winapi vba vb6 wininet