2012-05-26 4 views
2

내 캘린더 정보에 액세스하는 데 문제가있는 이유는 누구에게 알 수 있습니까? 나는 금지 된 403을 얻고있다.403/내 Google 캘린더에 액세스하기 위해 delphi 애플리케이션 사용 금지

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; 

감사합니다. mp

+0

Indy에서 사용하기 위해 SSL 라이브러리를 설치하고 설정합니까? –

+0

@ RyanJ.Mills - 나는 당신을 감사하고 (작동한다). –

답변

1

일부 읽기 후에는 리디렉션을 처리해야한다고 생각합니다. 따라서 응답이 리디렉션되는 경우 새 URL을 가져오고 새 URL로 새 요청 헤더에 권한을 다시 첨부하십시오. 그렇지 않으면 리디렉션 요청에 필요한 승인이 누락되어 403 오류가 발생합니다.

+0

옳은 길에있는 것 같습니다. Google은 로그인 후 항상 리디렉션합니다 (로그인 할 때 브라우저를 시청). Indy가 리디렉션을 처리 할 수 ​​있지만 리디렉션을 지시 할 수있는 속성이 있지만 그 이름이 지금 나를 벗어납니다. –

+2

당신은 'TIdHTTP.HandleRedirects' 속성을 생각하고 있습니다. 또한 TIdHTTP.OnRedirect 이벤트가 있습니다. –

+0

감사합니다. HandleRedirects = true이지만 OnRedirect는 실행되지 않습니다. 나는 붙어있다. –

관련 문제