I try to upload file into dropbox.
I use dropbox api https://www.dropbox.com/developers/reference/api#files-POST
procedure TDropbox.Upload2;
const
URL = 'https://api-content.dropbox.com/1/files/dropbox/';
var
Response: String;
Params: TIdMultipartFormDataStream;
https: TIdHTTP;
SslIoHandler: TIdSSLIOHandlerSocket;
begin
https := TIdHTTP.Create(nil);
Params := TIdMultipartFormDataStream.Create();
try
SslIoHandler := TIdSSLIOHandlerSocket.Create(https);
SslIoHandler.SSLOptions.Method := sslvTLSv1;
SslIoHandler.SSLOptions.Mode := sslmUnassigned;
https.IOHandler := SslIoHandler;
Params.AddFormField('oauth_signature_method', 'PLAINTEXT');
Params.AddFormField('oauth_consumer_key', FAppKey);
Params.AddFormField('oauth_token', FOAuth.AccessToken);
Params.AddFormField('oauth_signature', FAppSecret + '&' + FOAuth.AccessTokenSecret);
Params.AddFile('file', 'C:\test.txt', 'application/octet-stream');
https.Post(URL + 'test.txt', Params);
finally
FreeAndNil(https);
FreeAndNil(Params);
end;
end;
I got "400 Bad request".
All tokens are correct (other api works well).
How pass parameters for this api?
https.Post(URL + 'test.txt?oauth_signature_method=PLAINTEXT&oauth_consumer_key='+ FAppKey+'&oauth_token='+FOAuth.AccessToken+'oauth_signature='+FAppSecret + '&' + FOAuth.AccessTokenSecret, Params);
- 400 Bad request – BywatersTIdHTTP.Post()
directly, do not useTIdMultipartFormDataStream
at all.TIdHTTP
has several overloaded versions of thePost()
method. One accepts a filename string as input. Another accepts a non-MultipartTStream
as input, such as aTFileStream
. – Smallscale