2

カレンダー情報にアクセスできない理由を誰か教えてもらえますか? 403禁止になっています。

procedure TForm1.Button1Click(Sender: TObject);
var
  stringStream: TStringStream;
  slPost, slReply: TStringList;
  sPostResult: string;
begin
  slPost := TStringList.Create;
  slReply := TStringList.Create;
  try
    slPost.LineBreak := '&';
    slPost.Values['Email'] := 'me@gmail.com';
    slPost.Values['Passwd'] := 'pass';
    slPost.Values['service'] := 'cl';
    slPost.Values['source'] := 'company-program-version';

    stringStream := TStringStream.Create(slPost.Text);
    try
      IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
      sPostResult := IdHTTP1.Post('https://www.google.com/accounts/ClientLogin', stringStream);

      slReply.LineBreak:=#10;
      slReply.Text:=sPostResult;
      slReply.LineBreak:=#13#10;
      Memo1.Lines.Add(slReply.Text);
      Memo1.Lines.Add('response=' + IdHTTP1.ResponseText);

// 200 OK
      sPostResult := IdHTTP1.Post('https://www.google.com/accounts/ClientLogin', stringStream);

      IdHTTP1.Request.CustomHeaders.FoldLines:=false;
      IdHTTP1.Request.CustomHeaders.Clear;
      IdHTTP1.Request.CustomHeaders.Values['GData-Version']:='2.0';
      IdHTTP1.Request.CustomHeaders.Values['Authorization']:='GoogleLogin auth=' + slReply.Values['auth'];

(* custom headers:
      GData-Version: 2.0
      Authorization: GoogleLogin (line continues) auth=DQwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhateverwhatever *)

      IdHTTP1.Request.ContentType := 'application/atom+xml';

// 403 Forbidden
      memo1.Lines.Add(IdHTTP1.Get('https://www.googleapis.com/calendar/v3/users/me/calendarList'));
    finally
      stringStream.Free;
    end;
  finally
    slPost.Free;
    slReply.Free;
  end;
end;

ありがとう!mp

4

1 に答える 1

1

少し読んだ後、リダイレクトに対処する必要があると思います。したがって、応答がリダイレクトされる場合は、新しいURLを取得し、新しいURLを使用して新しいリクエストヘッダーに認証を再アタッチします。そうしないと、リダイレクトリクエストに必要な認証が失われ、403エラーが発生します。

于 2012-05-26T07:03:19.430 に答える