这样做:
Shell ("C:\Program Files\Internet Explorer\iexplore.exe -embedding http://www.websiteurl.com")
我的工作方式不起作用,因为我基本上需要它能够重定向并提示用户下载文件。有什么想法吗?
答案 0 :(得分:5)
Internet Explorer公开了可以使用的COM可访问界面。如果你真的需要。我建议反对它 - 它相对缓慢,容易出错,繁琐且资源密集。
使用WinHTTPRequest
更优雅地解决您的问题。在您的项目中,引用“Microsoft WinHTTP Services,版本5.1”,然后继续这样:
Dim HttpRequest As New WinHttp.WinHttpRequest
Dim TargetUrl As String
Dim TargetFile As String
Dim FileNum As Integer
TargetFile = "C:\foo.doc"
TargetUrl = "http://www.websiteurl.com"
HttpRequest.Open Method:="GET", Url:=TargetUrl, Async:=False
HttpRequest.Send
If HttpRequest.Status = 302 Then
TargetUrl = HttpRequest.GetResponseHeader("Location")
HttpRequest.Open Method:="GET", Url:=TargetUrl, Async:=False
HttpRequest.Send
If HttpRequest.Status = "200" Then
FileNum = FreeFile
Open TargetFile For Binary As #FileNum
Put #FileNum, 1, HttpRequest.ResponseBody
Close FileNum
Debug.Print "Successfully witten " & TargetFile
Else
Debug.Print "Download failed. Received HTTP status: " & HttpRequest.Status
End If
Else
Debug.Print "Expected Redirect. Received HTTP status: " & HttpRequest.Status
End If
硬编码"C:\foo.doc"
当然没有多大意义。我会在响应标头中使用服务器提供的文件名("Content-Type"
或"Content-Disposition"
,具体取决于您的预期)。
答案 1 :(得分:1)
你可以做几件事。
使用wget
之类的外部程序来获取文件而不是IE。您可以使用天鹅座工具在http://www.cygwin.com免费获得wget。这是GPL,所以请注意你是否有商业产品。
编写一个使用HttpWebRequest类的.NET程序来获取文件和shell而不是IE。我不认为你会对IE本身有很多运气。用史蒂夫乔布斯的话来说,听起来像是一个“受伤的袋子”。
答案 2 :(得分:0)
如果您要做的只是下载文件,则可以使用URLDownloadToFile。
答案 3 :(得分:0)
Internet Explorer界面通过WebBrowser控件(包含在%systemroot%\ system32 \ shlwapi.dll中)暴露给ActiveX。虽然它可能不是很优雅,但您可以轻松地将控件放在窗体可见区域之外的某处。
控件使用起来非常简单。
答案 4 :(得分:0)
您最好的选择是使用某些.NET http对象创建单独的下载应用程序以下载该文件。 我推荐WebClient。
如果你真的要坚持VB6,我相信你可以使用一些基本的套接字工作来直接下载文件。
答案 5 :(得分:0)
Glomek建议的URLDownloadToFile API调用之外的另一个选择是使用VB6中内置的AsyncRead方法。