403/Запрещено использовать приложение Delphi для доступа к моему календарю Google

Кто-нибудь может сказать мне, почему у меня возникают проблемы с доступом к моему календарю? Я получаю 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'] := '[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;

Спасибо! член парламента


person X-Ray    schedule 26.05.2012    source источник
comment
У вас установлены и настроены библиотеки SSL для использования Indy?   -  person Vivian Mills    schedule 26.05.2012
comment
@ RyanJ.Mills - да, спасибо (и это работает).   -  person X-Ray    schedule 27.05.2012


Ответы (1)


После некоторого чтения, я думаю, вам нужно разобраться с Redirect. Итак, если ответ перенаправлен, получите новый URL-адрес, повторно прикрепите авторизацию к новому заголовку запроса с новым URL-адресом. В противном случае в вашем запросе на перенаправление не будет необходимой авторизации, и вы получите ошибку 403.

person Hendra    schedule 26.05.2012
comment
Кажется, ты на правильном пути. Google всегда выполняет перенаправление после входа в систему (следите за своим браузером при входе в систему). Indy может обрабатывать перенаправления для вас, у него есть свойство, которое указывает ему это делать, но на данный момент имя ускользает от меня. - person Marjan Venema; 26.05.2012
comment
Вы думаете о свойстве TIdHTTP.HandleRedirects. Также есть событие TIdHTTP.OnRedirect. - person Remy Lebeau; 27.05.2012
comment
Спасибо. HandleRedirects=true, но OnRedirect никогда не срабатывает. Я застрял. - person X-Ray; 10.06.2012
comment
@xray, вы используете программное обеспечение для мониторинга трафика? Если нет, вы можете использовать, например, wireshark. Вы можете захватить трафик http/https. Запустите захват на wireshark и запустите вашу программу. Вы увидите трафик на экране захвата. На экране захвата вы можете щелкнуть правой кнопкой мыши по первому запросу и выбрать «следить за потоком tcp», и вы увидите полный разговор (запрос/ответ). Например, вы можете увидеть, ДЕЙСТВИТЕЛЬНО ли сервер перенаправляет запрос, и посмотреть, какие методы аутентификации поддерживает сервер. По крайней мере, это дает вам больше информации о том, что происходит. - person Hendra; 11.06.2012