You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过编程方式从Amazon CDN下载文件的问题求助

从Amazon CDN下载文件失败问题排查

我使用URLDownloadToFile下载文件通常运行正常,但尝试从Amazon CDN下载URL为https://download.datanumen.com/downloads/file/dexr.exe的文件时始终失败,手动通过Chrome或Firefox可以正常下载。

初始C++实现代码

//  Delete the cache before calling URLDownloadToFile
DeleteUrlCacheEntry(strURL);

HRESULT hr;

hr = URLDownloadToFile(NULL, strURL, strFileName, 0, NULL);

if (hr == INET_E_DOWNLOAD_FAILURE)
    hr = hr;

if (hr != S_OK)
{
    _com_error err(hr);

    _tprintf(_T("Error in download: %s.\n"), err.ErrorMessage());
}

IStream* stream;
hr = URLOpenBlockingStream(0, LPCTSTR(strURL), &stream, 0, 0);

if (hr != S_OK)
{
    _com_error err(hr);

    _tprintf(_T("Error in download: %s.\n"), err.ErrorMessage());
}

return  (hr == S_OK);

运行错误信息

Error in download: Unknown error 0x800C0005.
Error in download: Unknown error 0x800C0005.

由于返回未知错误,无法确定问题根源。


更新1:尝试Delphi代码下载

改用Delphi代码尝试下载该文件:

function DownloadFile(const strURL: string; const strFileName: string): Boolean;
var
  IdHTTP1: TIdHTTP;
  http : TNetHTTPClient;
  Stream: TMemoryStream;
  Url, FileName: String;
begin
  Url := 'http://www.rejbrand.se';
  Filename := 'download.htm';

  IdHTTP1 := TIdHTTP.Create(nil);
  http := TNetHTTPClient.Create(nil);
  Stream := TMemoryStream.Create;
  try
    //IdHTTP1.Get(strURL, Stream);
    http.Get(strURL, stream);
    Stream.SaveToFile(strFileName);
  finally
    Stream.Free;
    IdHTTP1.Free;
  end;
end;

异常信息

  • 使用TIdHTTP时:
Project DLVerify.exe raised exception class EIdOSSLUnderlyingCryptoError with message 'Error connecting with SSL.
error:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1 alert protocol version'.
  • 使用TNetHTTPClient时:
Project DLVerify.exe raised exception class ENetHTTPClientException with message 'Error sending data: (12175) A security error occurred'.

所有代码均无法成功下载该文件。


更新2:尝试指定多版本TLS/SSL

调整代码,指定多种SSL/TLS版本:

function DownloadFile1(const strURL: string; const strFileName: string): Boolean;
var
  LHTTP: TIdHTTP;
  LHandler: TIdSSLIOHandlerSocketOpenSSL;
  responseFromServer, sWhichFail, sVer :string;
    Stream: TMemoryStream;
begin
  //ResponseMemo.Clear;

  LHTTP := TIdHTTP.Create(nil);
  try
    LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(LHTTP);
    LHandler.SSLOptions.SSLVersions := [sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];
    LHandler.SSLOptions.Mode := sslmClient;
    LHandler.SSLOptions.VerifyMode := [];
    LHandler.SSLOptions.VerifyDepth := 0;

    LHTTP.IOHandler := LHandler;
    LHTTP.AllowCookies := True;

       Stream := TMemoryStream.Create;
  try
    //IdHTTP1.Get(strURL, Stream);
    LHTTP.Get(strURL, stream);
    Stream.SaveToFile(strFileName);
  finally
    Stream.Free;
    LHTTP.Free;
  end;
end;

结果仍然失败,错误信息与之前一致。


更新3:仅保留TLS 1.1和1.2版本

修改SSL版本设置为仅启用TLS 1.1和1.2:

LHandler.SSLOptions.SSLVersions := [sslvTLSv1_1,sslvTLSv1_2];

得到新的错误:

Project DLVerify.exe raised exception class EIdOSSLUnderlyingCryptoError with message 'Error connecting with SSL.
error:140740BF:SSL routines:SSL23_CLIENT_HELLO:no protocols available'.

内容的提问来源于stack exchange,提问作者alancc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:33:17