Delphi通过Indy TidHTTP (htttps)连接TidHTTP错误

内容来源于 Stack Overflow,遵循 CC BY-SA 4.0 许可协议进行翻译与使用。IT领域专用引擎提供翻译支持

腾讯云小微IT领域专用引擎提供翻译支持

原文
Stack Overflow用户 修改于2022-11-19
  • 该问题已被编辑
  • 提问者: Stack Overflow用户
  • 提问时间: 2022-11-17 00:26

我很难通过 TIdHTTP 连接到我的 TIdHTTP 账户,我不知道该怎么做了。我想在第一阶段向DropBox发送一个简单的文本文件。

procedure TForm2.btn1Click(Sender: TObject);
const
  API_URL = 'https://content.dropboxapi.com/2/files/upload';
  cFile   = 'D:\testfile.txt';
  wAccessToken : string;
  Source: TFileStream;
  IdHTTP: TIdHTTP;
  Res : string;
  Ssl: TIdSSLIOHandlerSocketOpenSSL;
begin
  wAccessToken := 'muj_token';
  IdHTTP := TIdHTTP.Create(nil);
    ShowMessage('Indy version: ' + IdHTTP.Version);
    RESULT MESSAGE : INDY 10.5.9.0
    IdHTTP.HandleRedirects := True;
    ssl := TIdSSLIOHandlerSocketOpenSSL.Create();
    ssl.SSLOptions.Method := sslvTLSv1_2;
    ssl.SSLOptions.Mode := sslmUnassigned;
    ssl.SSLOptions.VerifyMode := [];
    ssl.SSLOptions.VerifyDepth := 0;
    ssl.host := '';
    Source := TFileStream.Create(cFile, fmOpenRead);
    IdHTTP.IOHandler := ssl;
    IdHTTP.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + wAccessToken;
    IdHTTP.Request.CustomHeaders.Values['Dropbox-API-Arg'] :=
           '{ "autorename": false,"mode": "add","mute": false,"path": "/test.txt","strict_conflict": false}';
    IdHTTP.Request.CustomHeaders.Values['Content-Type']  := 'application/octet-stream';
    Memo1.Lines.Add(IdHTTP.Request.CustomHeaders.Text);
    Res := IdHTTP.Post(API_URL, Source);
  finally
      IdHTTP.Free;
  end;

但是,在 POST 命令之后,我得到了错误:

Project2.exe引发异常类EIdOSSLUnderlyingCryptoError,其消息为“与SSL连接错误:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1警报协议版本”。

我不知道该怎么做,哪里有个愚蠢的错误。我在StackOverflow上发现了类似的问题:

TIdHTTP in Indy 10

Post problems with Indy TIdHTTP

还有很多其他论坛。在某个地方,它说它可能是一个旧的Indy (它是这样的),但是DropBox可能需要TLS v1.2,尽管 TIdHTTP 启用了它:

ssl.SSLOptions.Method := sslvTLSv1_2

对于请求跟踪,我坚持DropBox的API结构:

DROPBOX API DOCUMENTATION
     https://www.dropbox.com/developers/documentation/http/documentation#files-upload
     Get access token for:
     ****************************************************** **************