TIdCompressorZLib 在为 Android 编译的 FireMonkey 应用程序中不起作用
TIdCompressorZLib doesn't work in FireMonkey app compiled for Android
我有一个使用 TIdCompressorZLib
和 TIdHTTP
的函数,像这样:
pegar := tidhttp.create(nil);
compressor := TIdCompressorZLib.create(pegar);
seguro := TIdSSLIOHandlerSocketOpenSSL.create(pegar);
pegar.compressor := compressor;
pegar.Request.UserAgent := UserAgent;
pegar.Request.Accept := '*/*';
pegar.Request.AcceptEncoding := 'gzip, deflate';
pegar.Request.AcceptLanguage := 'pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7';
pegar.HTTPOptions := [hoForceEncodeParams];
pegar.ReadTimeout := 60000;
pegar.ConnectTimeout := 60000;
pegar.HandleRedirects := true;
pegar.IOHandler := seguro;
pegar.CookieManager := cookm;
pagina := pegar.Get(proxima_pagina);
此代码在为 Windows 编译时工作正常,但在为 Android 编译时效果不佳。在 Android 上,TIdCompressorZLib
不解压源代码,返回不可读的字符。
有什么办法可以解决这个问题吗?我正在使用 Delphi 10.3.
去掉AcceptEncoding
属性的赋值。让 TIdHTTP
根据 Compressor
的实际能力在内部为您处理。您明确授予 HTTP 服务器发送压缩响应的权限,即使 Compressor
无法处理它(即,如果 Compressor.IsReady
为 False)。
也就是说,Indy 使用动态加载库在 non-Windows 平台上访问 ZLib。在这种情况下,'Nix 平台上的 libz
dylib(Android 在 Linux 之上运行),它可能不存在于您的 Android 项目中。 Compressor.IsReady
returns 如果 Indy 无法在运行时加载 ZLib 库,则为 False。因此,请确保您的部署中存在 dylib。如果您需要在运行时指定该文件的位置,Indy 在 IdZLibHeaders
单元中有一个 IdZLibSetLibPath()
函数。
我有一个使用 TIdCompressorZLib
和 TIdHTTP
的函数,像这样:
pegar := tidhttp.create(nil);
compressor := TIdCompressorZLib.create(pegar);
seguro := TIdSSLIOHandlerSocketOpenSSL.create(pegar);
pegar.compressor := compressor;
pegar.Request.UserAgent := UserAgent;
pegar.Request.Accept := '*/*';
pegar.Request.AcceptEncoding := 'gzip, deflate';
pegar.Request.AcceptLanguage := 'pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7';
pegar.HTTPOptions := [hoForceEncodeParams];
pegar.ReadTimeout := 60000;
pegar.ConnectTimeout := 60000;
pegar.HandleRedirects := true;
pegar.IOHandler := seguro;
pegar.CookieManager := cookm;
pagina := pegar.Get(proxima_pagina);
此代码在为 Windows 编译时工作正常,但在为 Android 编译时效果不佳。在 Android 上,TIdCompressorZLib
不解压源代码,返回不可读的字符。
有什么办法可以解决这个问题吗?我正在使用 Delphi 10.3.
去掉AcceptEncoding
属性的赋值。让 TIdHTTP
根据 Compressor
的实际能力在内部为您处理。您明确授予 HTTP 服务器发送压缩响应的权限,即使 Compressor
无法处理它(即,如果 Compressor.IsReady
为 False)。
也就是说,Indy 使用动态加载库在 non-Windows 平台上访问 ZLib。在这种情况下,'Nix 平台上的 libz
dylib(Android 在 Linux 之上运行),它可能不存在于您的 Android 项目中。 Compressor.IsReady
returns 如果 Indy 无法在运行时加载 ZLib 库,则为 False。因此,请确保您的部署中存在 dylib。如果您需要在运行时指定该文件的位置,Indy 在 IdZLibHeaders
单元中有一个 IdZLibSetLibPath()
函数。