X-Ray
X-Ray

Reputation: 2846

403/Forbidden using delphi application to access my Google calendar

Can anyone tell me why i'm having trouble accessing my calendar information? I'm getting 403 forbidden.

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'] := '[email protected]';
    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;

thank you! mp

Upvotes: 2

Views: 1172

Answers (1)

Hendra
Hendra

Reputation: 755

After some reading, I think you need to deal with Redirect. So If response is redirect, get the new url, reattach the authorization to the new request header with the new url. Otherwise your redirection request will be missing the required authorization and give you 403 error.

Upvotes: 1

Related Questions