【发布时间】:2017-01-03 02:03:24
【问题描述】:
我拥有 Dropbox 帐户 (API v2)、Delphi 7 和 Indy 10 的有效访问令牌。 当我尝试使用此令牌时,出现异常“HTTP/1.1 400 Bad Request”。 我看Dropbox API v2 看不懂: 请求有什么问题?
procedure TDropboxSaveFilterForm.TestButtonClick(Sender: TObject);
const
AccessToken = 'Hq7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
var
IdHTTP: TIdHTTP;
Source: TStringList;
Res, URL: WideString;
begin
Source := TStringList.Create;
IdHTTP := TIdHTTP.Create(nil);
IdHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
URL := 'https://api.dropboxapi.com/2/files/list_folder' + '?' +
'Authorization=Bearer ' + AccessToken;
Res := IdHTTP.Post(URL, Source);
Source.Free;
end;
带有标题的新代码,错误相同:-(。 根据Indy: Request 指定要发送到 HTTP 服务器的标头值。
procedure TDropboxSaveFilterForm.TestHeaderButtonClick(Sender: TObject);
const
AccessToken = 'Hq7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
URL = 'https://api.dropboxapi.com/2/files/list_folder';
var
IdHTTP: TIdHTTP;
Source: TStringList;
Head, Res: WideString;
Stream: TMemoryStream;
begin
Source := TStringList.Create;
IdHTTP := TIdHTTP.Create(nil);
IdHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
Head := 'Authorization: Bearer ' + AccessToken;
Stream := TMemoryStream.Create;
Stream.Write(Head, Length(Head));
Stream.Position := 0;
IdHTTP.Request.Source := Stream;
Res := IdHTTP.Post(URL, Source);
Source.Free;
end;
【问题讨论】:
-
授权不是请求的 URL 的一部分,但应该在 HTTP 标头中发送。
-
谢谢你,罗尔德·范·多恩。我尝试使用 head,如下所示:
codeHead := 'Authorization: Bearer' + AccessToken;流:= TMemoryStream.Create; Stream.Write(头部,长度(头部));流。位置:= 0; IdHTTP.Request.Source := 流; Res := IdHTTP.Post(URL, Source);code并没有成功。也许你有一个可行的例子? -
谢谢你,@Roald。
-
我不熟悉 Delphi/Indy,但也许如果您分享您的最新代码和由此产生的错误,其他人会更有帮助。此外,请检查响应正文本身是否存在特定错误。
-
谢谢@Greg 产生的错误一样:-(。我将代码添加到帖子中。