使用Delphi Indy下载OpenStreetMap瓦片失败问题排查
问题排查:Delphi Indy程序下载OSM瓦片突然失效并抛出EIdIOHandlerPropInvalid错误
自2025年9月21日左右,我用Delphi开发的一款Windows程序突然失效——该程序原本通过Indy的TIdHTTP.Get()方法下载在线OpenStreetMap瓦片,此前长期运行正常,但现在有时会抛出EIdIOHandlerPropInvalid错误,提示“IOHandler value is not valid”。
现需排查Delphi环境、Indy库、OpenStreetMap瓦片URL这几方面的变更可能导致此问题。
错误发生在以下代码处:
MemoryStream.Position:= 0; IdHTTP1.Get(SourceURL, MemoryStream);
程序使用的瓦片URL格式为:http://{s}.tile.openstreetmap.org/{z}/{x}/{y}(其中s='a')
TIdHTTP组件在单元的initialization和finalization部分创建与销毁,代码如下:
initialization IdHTTP1:= TIdHTTP.Create(nil); {$ifdef include_TIdSSLIOHandlerSocketOpenSSL} SSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil); SSLIOHandler.SSLOptions.Method := sslvSSLv2; SSLIOHandler.SSLOptions.Mode := sslmClient; IdHTTP1.IOHandler:= SSLIOHandler; {$endif} IdHTTP1.HandleRedirects := True; Alpha:= arctan(sinh(Pi)); finalization {$ifdef include_TIdSSLIOHandlerSocketOpenSSL} SSLIOHandler.Free; {$endif} IdHTTP1.Free; end.
该单元编译时使用指令:
{$undef include_TIdSSLIOHandlerSocketOpenSSL}
内容的提问来源于stack exchange,提问作者user11935527
相关产品推荐
相关产品推荐

