【问题标题】:403/Forbidden using delphi application to access my Google calendar403/禁止使用 delphi 应用程序访问我的 Google 日历
【发布时间】:2012-05-26 04:10:56
【问题描述】:

谁能告诉我为什么我无法访问我的日历信息?我被 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

【问题讨论】:

  • 您是否安装并设置了 SSL 库以供 Indy 使用?
  • @RyanJ.Mills -- 我愿意,谢谢(它有效)。

标签: delphi google-calendar-api indy10


【解决方案1】:

经过一番阅读,我认为您需要处理重定向。因此,如果响应是重定向,则获取新的 url,使用新的 url 将授权重新附加到新的请求标头。否则您的重定向请求将缺少所需的授权并给您 403 错误。

【讨论】:

  • 您似乎走在了正确的轨道上。 Google 总是在登录后重定向(登录时请注意您的浏览器)。 Indy 可以为你处理重定向,它确实有一个属性来指示它这样做,但这个名字现在让我忘记了。
  • 您正在考虑TIdHTTP.HandleRedirects 属性。还有一个TIdHTTP.OnRedirect 事件。
  • 谢谢。 HandleRedirects=true 但 OnRedirect 永远不会触发。我被困住了。
  • @xray,你使用流量监控软件吗?如果没有,您可以使用wireshark,例如。您可以捕获 http/https 流量。在wireshark上开始捕获,然后运行你的程序。您将在捕获屏幕上看到流量。在捕获屏幕上,您可以右键单击第一个请求并选择“follow tcp stream”,您可以看到完整的对话(请求/响应)。例如,您可以查看服务器是否真的重定向了请求,并查看服务器支持哪些身份验证方法。至少它为您提供了更多关于正在发生的事情的线索。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多