Dropbox请求有什么问题?

时间:2017-01-02 10:05:29

标签: delphi dropbox indy

我有Dropbox帐户(API v2),Delphi 7和Indy 10的有效访问令牌。 当我尝试使用此令牌时,我有异常' HTTP / 1.1 400错误请求'。 我看Dropbox API v2并且无法理解: 请求有什么问题?

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;

带标题的新代码,错误相同:-(。 根据{{​​3}}:Request指定要发送到HTTP服务器的标头值。

a = df.drop_duplicates(['state','area'])
print (a)
  country       state  year  area
0     usa        iowa  2000    30
4     usa      kansas  2000   500
8     usa  washington  2000   245

states = a.loc[a.area.div(a.area.sum()) >.1, 'state']
print (states)
4        kansas
8    washington
Name: state, dtype: object

print (df[df.state.isin(states)])
   country       state  year  area
4      usa      kansas  2000   500
5      usa      kansas  2001   500
6      usa      kansas  2002   500
7      usa      kansas  2003   500
8      usa  washington  2000   245
9      usa  washington  2001   245
10     usa  washington  2002   245
11     usa  washington  2003   245

1 个答案:

答案 0 :(得分:3)

您正尝试将授权数据放入请求网址和请求正文中。您应该将其放在请求标题中。使用TIdHTTP.Request.CustomHeaders属性发送自定义Authorization标头值,例如:

procedure TDropboxSaveFilterForm.TestHeaderButtonClick(Sender: TObject);
const
  AccessToken = 'Hq7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
  URL = 'https://api.dropboxapi.com/2/files/list_folder';
var
  IdHTTP: TIdHTTP;
  Source: TStringStream;
  Res: String;
  Stream: TMemoryStream;
begin
  Source := TStringStream.Create('JsonParamsHere');
  try
    IdHTTP := TIdHTTP.Create(nil);
    try
      IdHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
      IdHTTP.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + AccessToken;
      IdHTTP.Request.BasicAuthentication := False;
      IdHTTP.Request.ContentType := 'application/json';
      Res := IdHTTP.Post(URL, Source);
    finally
      IdHTTP.Free;
    end;
  finally
    Source.Free;
  end;
end;