今天研究阿里巴巴的对接,发现IDHTTP 的post 如果是 https 的连接就会报:“IOHandler value is not valid.”错误
加载https的站点页面内容的时候记得在窗体上加上“IdSSLIOHandlerSocketOpenSSL1”
以及idhttp里面IOHandler为“IdSSLIOHandlerSocketOpenSSL1”
不然老报“IOHandler value is not valid.”错误。
dnspod API V2.0 就是用的https 用delphi开发客户 只需要用idhttp就可以post
在界面上放一个TIdHTTP控件,命名为IdHTTP1,再放一个TIdSSLIOHandlerSocket控件,命名为
IdSSLIOHandlerSocket1,将IdHTTP1的IOHandler属性设为IdSSLIOHandlerSocket1,这样就可以随
意的Get,Post那些地址为https开头的网站了。
不过这样仍然不行,当运行程序时,会报错“Could not load SSL library”,这是因为
TIdSSLIOHandlerSocket控件需要OpenSSL Library来配合,OpenSSL Library包含有两个动态链接库
libeay32.dll和ssleay32.dll。
OpenSSL Indy版下载 http://indy.fulgan.com/SSL/
或http://download.csdn.net/detail/netcreate/3498085(经测试,delphi 2010下的indy可以用)
将这个rar解包释放两个dll到你的程序目录即可,但是我这样做完以后post数据还是不行,发现
idhttp这里有个版本的选项Method,默认的是sslvSSLv2,改为sslvSSLv3,post返回数据正常,
yeah~仔细看了看,这个属性是IdSSLIOHandlerSocket1的。
写一个登录HTTPS协议网站的工具,想用INDY实现
现在老是会报错“Could not load SSL library”,可是我已经把ssleay32.dll和libeay32.dll两个
库文件拷进去了,是不是要专门支持D7的库文件才可以.
有类似的代码也可以提供参考一下,非常感谢!
是的,在Indy10.0.5之前的版本所使用的OpenSSL是Indy特别的版本
Indy10.2.3之前仅支持OpenSSL的0.9.8以前的版本
Indy10.2.3及之后才支持…
加载https的站点页面内容的时候记得在窗体上加上IdSSLIOHandlerSocketOpenSSL1
以及idhttp里面IOHandler为IdSSLIOHandlerSocketOpenSSL1
不然老报错IOHandler value is not valid.错..
uses IdHTTP, IdSSLOpenSSL, SysUtils; Var IdHTTP1 : TIdHTTP; Src : string; LHandler: TIdSSLIOHandlerSocketOpenSSL; begin try IdHTTP1:=TIdHTTP.Create(nil); try LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil); try IdHTTP1.IOHandler:=LHandler; Src:= IdHTTP1.Get('https://tools.usps.com/go/ZipLookupResultsAction!input.action?resultMode=0&companyName=&address1=1600+PENNSYLVANIA+AVE+NW&address2=&city=&state=Select&urbanCode=&postalCode=&zip=20500'); Writeln(Src); finally LHandler.Free; end; finally IdHTTP1.Free; end; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; Readln; end.
我自己用的:(这个估计非常完善了,非常好了,兼容一号店 对接乱码的问题)
function THtpApi.MyHtpPost(const MyPostUrl: string; const MyCanShuList: TStringList): string; var MyHtp: TIdHTTP; MyStream: TStringStream; MyIoHd: TIdSSLIOHandlerSocketOpenSSL; begin MyHtp := TIdHTTP.Create(nil); MyStream := TStringStream.Create('', TEncoding.UTF8); MyIoHd := TIdSSLIOHandlerSocketOpenSSL.Create(nil); try MyHtp.IOHandler := MyIoHd; MyHtp.Post(MyPostUrl,MyCanShuList,MyStream,IndyTextEncoding_UTF8); Exit(MyStream.DataString); finally MyHtp.Free; MyStream.Free; MyIoHd.Free; end; end;
//2014-05-06 补充====真的需要这两个文件,我靠否则报下面的错误,因为我电脑上 delphi 根目录下有 所以就没有 报错,但是客户的电脑上没有=======
======================经过测试必须放到软件根目录下,任何名字的子目录都不行===================
后来发现很多软件 也都有 这个,靠 看来 以后 https 的post 就必须包含 这两个 dll 了。
---------------------------------------
目前主要是 阿里巴巴的 refreshToken 的时候 是https + post 方法 ,所以需要用到 这个,如果以后 阿里巴巴 不需要 refreshtoken 了就没有作用了,可以去掉了
本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/p/3704894.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人