我正在使用具有不受信任的TLS(SSL)证书的域,因此我可以调试一些东西。
这是我的代码:
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
子句中的行永远不会执行,而是出现以下错误:
即使我在没有附加调试器的情况下运行可执行文件,它仍会导致错误。
如何处理Inno Setup中的OleObject
异常?
答案 0 :(得分:1)
如您所料,WinHttpReq.Send
抛出
证书中的主机名无效或与
不匹配
您的except
阻止了该异常。从来没有执行过except
子句,这是不正确的。
在except
块中,您尝试阅读WinHttpReq.Status
(HTTP状态代码)。但是还没有HTTP状态代码,因为证书验证在任何HTTP交换之前发生。因此WinHttpReq.Status
getter抛出了第二个异常:
WinHttp.WinHttpRequest:完成此操作所需的数据尚不可用。
你没有任何处理程序。因此异常被Inno Setup本身捕获并显示为"运行时错误"。