Nie wydaje mi się, żebym zarządzał operacją kopiowania plików za pomocą interfejsu API Dropbox. Mogę z powodzeniem autoryzować mojego klienta, pobierać i przesyłać pliki. Operacja kopiowania wymaga użycia metody POST i myślę, że to tutaj generuję niewłaściwe żądanie. Definiuję metodę POST do uwierzytelniania OAuth i używam Indy TIdHTTP do wysłania żądania, ale zawsze otrzymuję kod błędu 403 - Odmowa uprawnień.Jak kopiować pliki za pomocą interfejsu API REST DropBox w Delphi
Oto opis Dropbox API: https://www.dropbox.com/developers/reference/api#fileops-copy
Tutaj jest częścią mojego kodu:
ParamStr := Format('root=%s&from_path=%s&to_path=%s', [Root, EncodeFileName(FromPath), EncodeFileName(ToPath)]);
URL := 'https://api.dropbox.com/1/fileops/copy' + '?' + ParamStr;
Consumer := TOAuthConsumer.Create(Key, Secret);
AToken := TOAuthToken.Create(fToken, fTokenSecret);
HMAC := TOAuthSignatureMethod_HMAC_SHA1.Create;
ARequest := TOAuthRequest.Create('');
try
ARequest.HTTPURL := URL;
ARequest.Method := 'POST';
ARequest := ARequest.FromConsumerAndToken(Consumer, AToken, '');
ARequest.Sign_Request(HMAC, Consumer, AToken);
Params := TStringList.Create;
try
Params.Text := ParamStr + '&' + ARequest.GetString;
HTTP.Post(URL, Params);
finally
Params.Free;
end;
Spróbuj rozejrzeć się, jak korzystać z Indy z SSL. Założę się, że brakuje ci bibliotek OpenSSL. – TLama
Co sprawia, że uważasz, że błąd oznacza coś innego niż udokumentowane znaczenie? "403: Podjęto próbę nieważnego kopiowania (np. Już istnieje plik w danym miejscu docelowym lub kopiowanie folderu współdzielonego do folderu współdzielonego)." –
@ Tlama, czy biblioteki biblioteki SSL nie ominą również operacji autoryzacji, przesyłania i pobierania, które rzekomo działają? –