2016-03-21 23 views
1

信頼できないTLS(SSL)証明書を持つドメインを使用しているため、何かをデバッグすることができました。Innoセットアップ例外がキャッチされない

これは私のコードです:

procedure test(); 
var 
    WinHttpReq: Variant; 
begin 
    WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1'); 
    try 
    WinHttpReq.Open('POST', 'https://tv.eurosport.com/', False); 
    WinHttpReq.SetRequestHeader('Content-Type', 'application/json'); 
    WinHttpReq.Send(''); 
    except 
    MsgBox(IntToStr(WinHttpReq.Status), mbError, MB_OK); 
    end; 
end; 

私はHTTPステータスコードを印刷したい要求にエラーが発生した場合。

問題がexcept句の行が実行されることはありませんということで、代わりに私は次のエラーを取得する:私は付属のデバッガなしで実行可能ファイルを実行している場合でも
enter image description here

それはまだエラーが発生します。

InnoセットアップでOleObject例外を処理するにはどうすればよいですか?

答えて

1

あなたが期待するとおり、WinHttpReq.Sendは、例外があなたのexceptブロックでキャッチされ

The host name in the certificate is invalid or does not match

をスローします。 except句が決して実行されないことは事実ではありません!

exceptブロックでは、WinHttpReq.Status(HTTPステータスコード)を読み取ろうとします。しかし、まだHTTPステータスコードはありません。なぜなら、証明書の検証はの前に行われ、 HTTPの交換が行われるからです。だから、2番目の例外はWinHttpReq.Statusゲッターによってスローされます。

WinHttp.WinHttpRequest: The data necessary to complete this operation is not yet available.

そして、あなたはそのための任意のハンドラを持っていません。したがって、例外はInnoセットアップ自体によって捕捉され、 "ランタイムエラー"として表示されます。

+0

証明書エラーのexcept節にステータスコードを記述する方法はありますか? – yuval

関連する問題