2009-03-03 4 views
5

Google Contacts API로 Indy HTTP (Delphi에서)를 사용하는 데 문제가 있습니다.Indy HTTP : 403에서 응답 내용 읽기

다음 페이지의 섹션 "ClientLogin에 응답"을 참조하십시오 인증이 올바르지 않거나 오류가 발생할 때 예상대로

http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html

서버는 ... 403을 반환합니다. 그러나이 문서에 따르면 응답 내용에는 클라이언트가 필요로하는 정보가 있습니다 (예 : 오류 이유 및 보안 문자 URL 등이 포함됩니다.

Indy IdHTTP 구성 요소는 403에 예외를 발생시키고 응답 내용은 비어 있습니다. 나는 지금까지이 내용을 얻는 방법을 찾지 못했습니다. 시도에서 POST에 대한 호출을 시도했지만 ... 응답 스트림을 읽는 것을 제외하고는 항상 403에서 비어 있습니다.

어떻게하면됩니까?

답변

7

해결책을 찾았습니다. 내용이 EIdHTTPProtocolException의 ErrorMessage 필드에 저장되어있는 것 같습니다.

try 
    http.Post('https://www.google.com/accounts/ClientLogin', slReq); 
except 
    on E: EIdHTTPProtocolException do 
     Memo1.Lines.Add(E.ErrorMessage); 
end; 

트릭을 수행하는 것으로 보입니다.

(그건 그렇고, 저는 Indy 9를 사용하고 있습니다.)

+0

좋아요! 저와 StackOverflow를 저장 한 또 다른 질문 :-) – Vegar

2

당신 말이 맞습니다. TIdHTTPProtocol.ProcessResponse에서 응답이 읽히지 만 그 이후는 무시됩니다. (그리고 심지어 전무로 설정)

그러나 아마도 당신이 버그 리포트 또는 기능 요청을 제기 할 수 IdHTTP.Response.ContentStream

에 응답을 작성하는 CheckException 기능을 쉽게 적응할 수 있어야합니다.

+0

답장을 보내 주셔서 감사합니다. 그 대답을 찾는데 도움이되었습니다. – kes

+0

나는 upvote를 시도했다. 그러나 명백하게 나는 그렇게하는 데 충분한 명성이 없다. – kes

+0

인디의 코드를 변경할 필요가 없습니다. yoy가 최신 버전을 사용하고 있다면'TIdHTTP.HTTPOptions' 속성에서'hoNoProtocolErrorException'과'hoWantProtocolErrorContent' 플래그를 활성화 할 수 있습니다. –