Delphi的idhttp报508 Loop Detected错误的原因
一般是访问https时才出现“508 Loop Detected”,idhttp+IdSSLIOHandlerSocketOpenSSL,这个在上篇文章中讲过了。
由于该问题网上资料极少,连外文资料也没卵用,起初我也以为是idhttp的重定向设置问题,但确认过没设置错。
idHttp.HandleRedirects := True;
不过相比https,http的话不会出现这个问题,这就很奇怪了,继续测试...
那么发现,访问普通的https是有返回数据的并且没有报“508 Loop Detected”错误,这说明我的代码与控件是没错误的。
而这条地址(具体URL就不公布了)用浏览器访问、抓包是有返回数据的,但问题出在哪了?
然后打开一个我早年写的https调试工具去访问这个地址,居然正常,晕了,都是我写的可独立调用http库,怎么会有这种问题,开始比较源码......
看了N遍,几乎没任何问题,可就是一个报错,一个不报错,突然间想到了一个可能存在问题的地方,就是调试工具中允许自定义UserAgent,立马将其默认内容赋给出问题的软件,
idHttp.Request.UserAgent := 'Mozilla/5.0 (MSIE 6.0;Windows NT 6.1; rv:23.0) Chrome/53.0.2785.104 Safari/537.36 QQBrowser/9.6.10872.400';
放鞭炮!哥解决了,原来是我曾更新过UserAgent,而刚巧这个https地址最近又升级了,严格控制了对用户的访问浏览器类型与版本的要求,反而导致我们这种模拟不严谨的idhttp请求不到数据。
而在UserAgent的设置中,还可以有很多浏览器信息比如Firefox、AppleWebKit等等,但是UserAgent中一定一定要有MSIE 6.0,也就是微软的IE浏览器,我也测试过IE其他版本信息,发现丢包情况比较频繁,而6.0几乎不丢,说明服务商对低版本的IE兼容还是最稳定的。
2017-10-25补充:
我之前是D2007+Indy10.2.3(兼容D2007最高版本),虽然满足了一般ssl网站的请求,但有些限制更加严格的就会继续报“508 Loop Detected”错误,那么临时方法只好用WebBrowser来取返回数据,或者干脆大升级换Delphi XE版本以上才能正常请求数据,而我的旧程序几万行代码升级工程量不是一般的大~如果你们是新程序或代码量小倒无所谓。
2018-11-01补充:
其实D2007可以升级更高版本的Indy解决上面的问题,但是字符类型与低版本定义不同,如果是升级旧程序,将产生大量的编码显示错误等问题以致调通需要耗费大量的时间。目前已发现Indy 10.2.3在idhttp上无法支持一些新网站获取部分动态加密数据,如TX等。
Delphi的idhttp报508 Loop Detected错误的原因的更多相关文章
- Flask视图函数报fmalformed url rule错误的原因
Flask视图函数报fmalformed url rule错误,原因可能是包含中文字符了 把标点符号都重新写一遍英文格式的,可能就不会报这个了
- Delphi的idhttp报IOHandler value is not valid错误的原因[转]
出现这种问题的原因是由于访问的 URL地址为https或存在其跳转地址为https. 首先单纯使用idhttp是只能访问http,而https则需要搭配IdSSLIOHandlerSocketOpen ...
- Delphi的idhttp报IOHandler value is not valid错误的原因
出现这种问题的原因是由于访问的 URL地址为https或存在其跳转地址为https. 首先单纯使用idhttp是只能访问http,而https则需要搭配IdSSLIOHandlerSocketOpen ...
- sharepoint报HRESULT:0x80131904的错误的原因和解决方法
在新建文件库的时候出现的.下上传文件和更改权限,都是在报这个HRESULT:0x80131904的错误,基本所有操作都报同一个错误,如下图: 错误原因 这个问题其实就是:sharepoint配置文件( ...
- Jquery.ajax报parseerror Invalid JSON错误的原因和解决方法:不能解析
(默认: 自动判断 (xml 或 html)) 请求失败时调用时间.参数有以下三个:XMLHttpRequest 对象.错误信息.(可选)捕获的错误对象.如果发生了错误,错误信息(第二个参数)除了得到 ...
- jquery报变量没定义错误的原因
该变量定义的范围:不在使用的方法中:
- heap corruption detected错误解决方法调试方法以及内存管理相关
1.heap corruption detected http://vopit.blog.51cto.com/2400931/645980 heap corruption detected:aft ...
- EF关于报错Self referencing loop detected with type的原因以及解决办法
1)具体报错 { "Message": "出现错误.", "ExceptionMessage": "“ObjectContent` ...
- Self referencing loop detected for property 错误
EF 序列化返回json时 报错:Self referencing loop detected for property 解决方案:在webapiconfig.cs文件中,增加设置: 1.config ...
随机推荐
- SwipeRefreshLayout的高度测量
感谢此作者的分享 http://www.cnblogs.com/linjzong/p/5221604.html 若SwipeRefreshLayout的子布局为一个线性布局LinearLayout, ...
- Android SimpleAdapter的参数
1.作用是ArrayList和 ListView的桥梁.这个ArrayList里边的每一项都是一个Map<String,?>类型. ArrayList当中的每一项 Map对象都 ...
- HTTP请求封装:Ajax与RESTful API
一.HTTP请求 HTTP即超文本传输协议,用以进行HTML 文件. 图片文件. 查询结果等的网络传输. 一个完整的HTTP请求包括:请求行.请求头.空行和请求数据(请求数据可以为空) HTTP1.1 ...
- redis 迭代命令SCAN、SSCAN、HSCAN、ZSCAN
SCAN 命令用于迭代当前数据库中的数据库键.SSCAN 命令用于迭代集合键中的元素.HSCAN 命令用于迭代哈希键中的键值对.ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值). S ...
- alter system register的用法
转自 http://blog.csdn.net/njyxfw/article/details/7516143 今天一个同事问到我,有没动态注册监听的命令,查了下,找到了alter system reg ...
- webpack的require是如何工作的?
https://stackoverflow.com/questions/35625593/how-does-webpacks-require-work wepback的require函数调用类似于no ...
- HBase 负载均衡
HBase 可以根据当前集群的负载以region为单位进行rebalance.在HMaster中,后台会起一个线程定期检查是否需要进行rebalance,线程叫做BalancerChore.线程每隔 ...
- Windows+Git+TortoiseGit+COPSSH 安装教程及问题收集
准备工作: 1. git-1.8.1.2-preview20130201.exe 下载地址: https://code.google.com/p/msysgit/downloads/list 2. C ...
- 官方推荐的MySQL参数设置值
这oracle官方推荐的在OLTP环境下,MySQL参数设置的最佳实践. 下面的参数设置,对系统的性能会很有帮助.但是建议大家还是结合实际情况使用. APPLIES TO: MySQL Server ...
- How To Change Log Rate Limiting In Linux
By default in Linux there are a few different mechanisms in place that may rate limit logging. These ...