Autor Téma: DROPBOX přes Indy TidHTTP (htttps) nefunguje  (Přečteno 172 krát)

Offline pospisil.lada

  • Plnoletý
  • ***
  • Příspěvků: 161
  • Karma: 2
    • Verze Delphi: D7
DROPBOX přes Indy TidHTTP (htttps) nefunguje
« kdy: 17-11-2022, 01:00:41 »
Mořím se s připojením na účet DROPBOXU přes TidHTTP a už si nevím rady. Chci v první fázi na DROPBOX poslat jednoduchý textový soubor.

Kód: Delphi [Vybrat]
  1. procedure TForm2.btn1Click(Sender: TObject);
  2. const
  3.   API_URL = 'https://content.dropboxapi.com/2/files/upload';
  4.   cFile   = 'D:\testfile.txt';
  5.  
  6. var
  7.   wAccessToken : string;
  8.   Source: TFileStream;
  9.   IdHTTP: TIdHTTP;
  10.   Res : string;
  11.   Ssl: TIdSSLIOHandlerSocketOpenSSL;
  12.  
  13. begin
  14.  
  15.   wAccessToken := 'muj_token';
  16.   IdHTTP := TIdHTTP.Create(nil);
  17.   try
  18.     (*
  19.     ShowMessage('Indy version: ' + IdHTTP.Version);
  20.     RESULT MESSAGE : INDY 10.5.9.0
  21.     *)
  22.     IdHTTP.HandleRedirects := True;
  23.     ssl := TIdSSLIOHandlerSocketOpenSSL.Create();
  24.     ssl.SSLOptions.Method := sslvTLSv1_2;
  25.     ssl.SSLOptions.Mode := sslmUnassigned;
  26.     ssl.SSLOptions.VerifyMode := [];
  27.     ssl.SSLOptions.VerifyDepth := 0;
  28.     ssl.host := '';
  29.  
  30.     Source := TFileStream.Create(cFile, fmOpenRead);
  31.  
  32.     IdHTTP.IOHandler := ssl;
  33.     IdHTTP.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + wAccessToken;
  34.     IdHTTP.Request.CustomHeaders.Values['Dropbox-API-Arg'] :=
  35.            '{ "autorename": false,"mode": "add","mute": false,"path": "/test.txt","strict_conflict": false}';
  36.     IdHTTP.Request.CustomHeaders.Values['Content-Type']  := 'application/octet-stream';
  37.  
  38.     (*
  39.     DROPBOX API DOCUMENTATION
  40.      https://www.dropbox.com/developers/documentation/http/documentation#files-upload
  41.      Get access token for:
  42.      ***************************************************************
  43.      curl -X POST https://content.dropboxapi.com/2/files/upload \
  44.      --header "Authorization: Bearer <get access token>" \
  45.      --header "Dropbox-API-Arg: {\"autorename\":false,\"mode\":\"add\",\"mute\":false,\"path\":\"/Homework/math/Matrices.txt\",\"strict_conflict\":false}" \
  46.      --header "Content-Type: application/octet-stream" \
  47.      --data-binary @local_file.txt
  48.      ****************************************************************
  49.     *)
  50.     Memo1.Lines.Add(IdHTTP.Request.CustomHeaders.Text);
  51.  
  52.     Res := IdHTTP.Post(API_URL, Source);
  53.  
  54.   finally
  55.       IdHTTP.Free;
  56.   end;
  57.  

Po příkazu POST ale dostanu chybu "error: 1409442E:SSL routines: SSL3_READ_BYTES:tlsv 1 alert protocol" - class EIdOSSLUnderlyingCryptoError with message "Error connectin with SSL"


Nevím už jak dál, někde je hloupá chyba. Původně jsem si načetl, že bude staré INDY (což je), ale DROPBOXEM požadovaný TLS v. 1.2 asi má, když jej TIDHTTP nabízí
Kód: Delphi [Vybrat]
  1. ssl.SSLOptions.Method := sslvTLSv1_2;

U Request skladby jsem se držel struktury DROBOX.API
Kód: Delphi [Vybrat]
  1.     DROPBOX API DOCUMENTATION
  2.      https://www.dropbox.com/developers/documentation/http/documentation#files-upload
  3.      Get access token for:
  4.      ***************************************************************
  5.      curl -X POST https://content.dropboxapi.com/2/files/upload \
  6.      --header "Authorization: Bearer <get access token>" \
  7.      --header "Dropbox-API-Arg: {\"autorename\":false,\"mode\":\"add\",\"mute\":false,\"path\":\"/Homework/math/Matrices.txt\",\"strict_conflict\":false}" \
  8.      --header "Content-Type: application/octet-stream" \
  9.      --data-binary @local_file.txt
  10.      ****************************************************************
  11.  

Ještě další informace:
  • Delphi XE3
  • Indy 10.5.9.0
  • při exe  mám Open SSL soubory libeay32.dll (1.0.2.17) a ssleay32.dll(1.0.2.17) - ale tím to nebude. pokud je vyhodím je chyba stejná
  • DROPBOX požaduje od dubna TLS 1.2

Na některých fórech psali stejnou chybu při starých Open SSL souborech, staré INDY, odesílání přes TLS které nepodporuje adresát. Ale ani jedno mi nepřipadá. Open SSL jsem stáhnul z
https://github.com/IndySockets/OpenSSL-Binaries
soubor
Kód: Delphi [Vybrat]
  1. openssl-1.0.2u-x64_86-win64.zip
(tdy nevím jestli dobře, v tabulce je jich hromada s odlišností ve jméně "r", "s", "t", "u", vybral jsem ten poslední.

Děkuji za jakoukoliv radu.


Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1197
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:DROPBOX přes Indy TidHTTP (htttps) nefunguje
« Odpověď #1 kdy: 17-11-2022, 18:00:04 »
Zkus
ssl.SSLOptions.SSLVersions:=[sslvTLSv1_2];