用indy组件post HTTPS出现异常

czx239 2017-02-07 04:06:30
post方法呢,就是indy通用的idhttp+IdSSLIOHandlerSocketOpenSSL+2dll的方式post HTTPS网页,来验证登录。
(直接调用WinINet 的api不行,post过去好像始终都是空的,返回正常)。
但是现在遇到一个很奇怪的问题。
我这边post 15次,只有2-3次是能成功,并得到返回结果的,其他大部分时候都是提示scoket error #0。
而这15次post服务器端那边每次都能接收到。返回显示也正常。
有点像等待超时?
ReadTimeout,ConnectTimeout都设置为10S,Request.Connection 为 'Keep-Alive',也没有用。
用cmd命令netstat -ano查看连接情况所有的连接都是close wait的状态。
最后分析的结果是,我这边post过去,服务器端正常接收到了,我在等待返回结果的时候,却被服务器端主动关闭连接了?
...全文
588 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
santiaodahan 2017-02-09
  • 打赏
  • 举报
回复
涨姿势。应该是hoKeepOrigProtocol选项起作用,hoForceEncodeParams是默认值,根据源码,当无hoKeepOrigProtocol选项时http协议版本强制为pv1_0,可能是此原因造成的。
czx239 2017-02-09
  • 打赏
  • 举报
回复
已经解决,还是我同事找到原因了,也给其他出现这个问题朋友说一下。(找资料的时候也看到好多人说到最后还是有问题,最后改用API的) 就是IdHTTP创建后要加上下面一句 vIdHTTP := TIdHTTP.Create(nil); vIdHTTP.HTTPOptions := [hoKeepOrigProtocol, hoForceEncodeParams];
zhujinqiang 2017-02-09
  • 打赏
  • 举报
回复
还没解决嘛?
czx239 2017-02-08
  • 打赏
  • 举报
回复
顶一下,有可能是indy版本不对?
czx239 2017-02-07
  • 打赏
  • 举报
回复
最开始帐号验证接口和网页是在一起,都是在http上的。帐号验证都没有问题。 把接口换到HTTPS上后就有问题了。
czx239 2017-02-07
  • 打赏
  • 举报
回复
引用 3 楼 santiaodahan 的回复:
[quote=引用 2 楼 czx239 的回复:] [quote=引用 1 楼 santiaodahan 的回复:] 登录第三方服务器?通常登录由浏览器来完成,这种模拟会被认为是恶意的,关闭连接可能是这个原因。有个名词叫用户代理欺骗,就是指客户端伪装成浏览器,伪装得不像就会被拒绝。
不是模拟登录,就是专门提供的一个验证帐号的接口。[/quote] 什么样的服务器。仅提供这种登录,还是也有通过浏览器页面登录的方式。如果是专门的应用服务器应该提供接口文档或示例,它会告诉你发送哪些参数。不完全失败,应该是代码可用。不稳定可能是网络环境或还是服务器设置问题。[/quote] 仅仅是应用服务器,专门用来和应用对接的,还有一些其他接口,而该网站的正常登录,操作是在一个http网站上的。 这个接口应用服务器用的https。
santiaodahan 2017-02-07
  • 打赏
  • 举报
回复
引用 2 楼 czx239 的回复:
[quote=引用 1 楼 santiaodahan 的回复:] 登录第三方服务器?通常登录由浏览器来完成,这种模拟会被认为是恶意的,关闭连接可能是这个原因。有个名词叫用户代理欺骗,就是指客户端伪装成浏览器,伪装得不像就会被拒绝。
不是模拟登录,就是专门提供的一个验证帐号的接口。[/quote] 什么样的服务器。仅提供这种登录,还是也有通过浏览器页面登录的方式。如果是专门的应用服务器应该提供接口文档或示例,它会告诉你发送哪些参数。不完全失败,应该是代码可用。不稳定可能是网络环境或还是服务器设置问题。
czx239 2017-02-07
  • 打赏
  • 举报
回复
引用 1 楼 santiaodahan 的回复:
登录第三方服务器?通常登录由浏览器来完成,这种模拟会被认为是恶意的,关闭连接可能是这个原因。有个名词叫用户代理欺骗,就是指客户端伪装成浏览器,伪装得不像就会被拒绝。
不是模拟登录,就是专门提供的一个验证帐号的接口。
santiaodahan 2017-02-07
  • 打赏
  • 举报
回复
登录第三方服务器?通常登录由浏览器来完成,这种模拟会被认为是恶意的,关闭连接可能是这个原因。有个名词叫用户代理欺骗,就是指客户端伪装成浏览器,伪装得不像就会被拒绝。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧