2009-03-03 20 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のように応答が読み込まれたが、それ以降は破棄された。 (さらにnilに設定されていない)

しかし、おそらく、あなたは、バグレポートや機能要求を提出できIdHTTP.Response.ContentStream

に応答を書くことCheckException機能を適合させることが容易であるべきです。

+0

ありがとうございました。それは私が答えを見つけるのを助けた。 – kes

+0

私はupvoteしようとしたが、明らかに私はそうするために十分な評判を持っていない。 – kes

+0

Indyのコードを変更する必要はありません。 yoyが最新バージョンを使用している場合は、 'TIdHTTP.HTTPOptions'プロパティの' hoNoProtocolErrorException'と 'hoWantProtocolErrorContent'フラグを有効にすることができます。 –

関連する問題