0

我想使用 HTTP 下载文件。我该怎么做?

4

1 回答 1

1

我对此进行了进一步调查,结果重新整理了我上周的建议:

  1. VO 的“Internet”库中的“CHttp”类有一个 GetFile 方法(VO 2.5“新增功能”在第 10 页上有简要说明)。不过,我还没有尝试过。你可能会想要这样的东西:

    local oSession as CHttp
    local lSuccess as logic
    
    oSession := CHttp{} 
    oSession:ConnectRemote("foo.example.com")      // Server domain name
    lSuccess := oSession:GetFile("bar/baz.pdf",;   // Remote filename
                                "c:\temp\baz.pdf",; // Local filename
                                lFailIfAlreadyExists)   
    oSession:CloseRemote()
    // If lSuccess, the file should be downloaded to cLocalFileName.
    // I don't know whether the filename arguments should use / or \ for directory separators.
    
  2. 我认为另一种方法是使用 WindowsShellExecute函数来调用下载文件的外部程序。我在这里找到了 ShellExecute 的示例。我没有尝试过,因为我目前没有可用的 VO 编译器(或帮助文件!)。我不确定这是否是一个好方法,我不知道人们通过提供一个偷偷摸摸的文件名来运行恶意命令是否安全。但我认为以下可能有效。它假定您的路径上有程序curl.exe(请参阅:curl),用于下载文件。您可能需要完整的路径来curl.exe代替。我不确定默认情况下文件将保存在哪里(我认为您可以在标记为的参数中指定一个工作目录lpDirectory

    local cParameters as string
    local cURL:="http://www.example.com/interesting.htm" as string
    local cLocalFile:="savefile.html" as string
    cParameters := "-o "+cLocalFile+" "+cURL
    
    ShellExecute(NULL /*Window handle*/,;
       String2PSZ("open"),;   
       String2PSZ("curl.exe"),;
       String2PSZ(cParameters),;
       NULL_PTR /* lpDirectory */,;
       SW_SHOWNORMAL) 
    

    另请参阅ShellExecute 的 MSDN 页面

  3. 似乎有一种方法App:Run(cCommand)可用于启动外部应用程序

于 2011-12-27T22:42:30.670 回答