【问题标题】:TDownloadURL cannot download from HTTPSTDownloadURL 无法从 HTTPS 下载
【发布时间】:2013-01-14 19:13:46
【问题描述】:

我一直在尝试通过 TDownloadURL 类创建 (TFileStream) PDF,但我在从 URL 获取文件/流时确实遇到了麻烦,特别是如果 URL 是 HTTPS。

我不确定我是否清楚,但我会发布一个 sn-p 以便它可能有助于理解:

implementation
var pdfStreamed: TDownloadUrl;
var fileStream : TFileStream;
  procedure generateStream;
  begin
    pdfStreamed:= TDownLoadURL.Create(nil);
    with pdfStreamed do
      begin
        URL := 'https://farm9.staticflickr.com/8327/8106108098_08e298f0d9_b.jpg'; //stream;
        FileName := 'D:\';
        ExecuteTarget(nil);
//        Execute;
      end;
  end;

URL 属性在 HTTP 和 HTTPS 中都存在!但它给我一个错误: 异常类异常,带有消息“下载 URL 时出错:https://farm9.staticflickr.com/8327/8106108098_08e298f0d9_b.jpg”。

能指出我做错了什么吗?我为此搜索了很多,但找不到任何有效且简单的方法!

非常感谢!

【问题讨论】:

    标签: delphi https delphi-xe2 pascal tfilestream


    【解决方案1】:

    TDownloadURL 只是微软URLDownloadToFile() 函数的一个薄包装,它支持HTTPS 就好了。

    TDownloadURL 没有告诉你为什么URLDownloadToFile() 失败了,不幸的是。但是,我可以看到您将 FileName 属性设置为只是一个文件夹路径,但您需要将其设置为要创建以保存下载数据的目标文件的完整路径和文件名。 IOW,改变这个:

    FileName := 'D:\';
    

    到这里:

    FileName := 'D:\8106108098_08e298f0d9_b.jpg';
    

    【讨论】:

    • 嘿@Remy 感谢您的回复,但我已经尝试过这个解决方案,但它没有用!它一直显示“下载 URL 时出错”。我知道它只是一个包装器,但是 Deplhi 会影响这个调用吗?它会给我一个错误吗? :\ 顺便说一句,如果我用 HTTP 替换 HTTPS,它就可以了!但我真的需要 HTTPS =\
    • 您看到的错误消息意味着 URLDownloadToFile() 本身失败,而不是 TDownloadURL。它只是一个普通的 API 函数调用。如果您想找出 URLDownloadToFile() 失败的原因,您需要直接调用它,以便访问其生成的错误代码,TDownloadURL 不会公开访问权限。
    【解决方案2】:

    使用 Remy 的更改文件名的答案来指定正确的保存位置,但要修复,请将 ExecuteTarget 行更改为类似

    ExecuteTarget(Self);

    我刚刚用这两个更改尝试了您的代码,它成功下载了图像。本质上,组件需要一个句柄来引用来自Here

    【讨论】:

      猜你喜欢
      • 2012-08-21
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 2015-04-02
      • 2016-07-13
      • 2019-05-19
      • 2011-11-21
      相关资源
      最近更新 更多