一般是访问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错误的原因的更多相关文章

  1. Flask视图函数报fmalformed url rule错误的原因

    Flask视图函数报fmalformed url rule错误,原因可能是包含中文字符了 把标点符号都重新写一遍英文格式的,可能就不会报这个了

  2. Delphi的idhttp报IOHandler value is not valid错误的原因[转]

    出现这种问题的原因是由于访问的 URL地址为https或存在其跳转地址为https. 首先单纯使用idhttp是只能访问http,而https则需要搭配IdSSLIOHandlerSocketOpen ...

  3. Delphi的idhttp报IOHandler value is not valid错误的原因

    出现这种问题的原因是由于访问的 URL地址为https或存在其跳转地址为https. 首先单纯使用idhttp是只能访问http,而https则需要搭配IdSSLIOHandlerSocketOpen ...

  4. sharepoint报HRESULT:0x80131904的错误的原因和解决方法

    在新建文件库的时候出现的.下上传文件和更改权限,都是在报这个HRESULT:0x80131904的错误,基本所有操作都报同一个错误,如下图: 错误原因 这个问题其实就是:sharepoint配置文件( ...

  5. Jquery.ajax报parseerror Invalid JSON错误的原因和解决方法:不能解析

    (默认: 自动判断 (xml 或 html)) 请求失败时调用时间.参数有以下三个:XMLHttpRequest 对象.错误信息.(可选)捕获的错误对象.如果发生了错误,错误信息(第二个参数)除了得到 ...

  6. jquery报变量没定义错误的原因

    该变量定义的范围:不在使用的方法中:

  7. heap corruption detected错误解决方法调试方法以及内存管理相关

    1.heap corruption detected http://vopit.blog.51cto.com/2400931/645980   heap corruption detected:aft ...

  8. EF关于报错Self referencing loop detected with type的原因以及解决办法

    1)具体报错 { "Message": "出现错误.", "ExceptionMessage": "“ObjectContent` ...

  9. Self referencing loop detected for property 错误

    EF 序列化返回json时 报错:Self referencing loop detected for property 解决方案:在webapiconfig.cs文件中,增加设置: 1.config ...

随机推荐

  1. 签署您的应用--手动签署 APK

    签署您的应用 本文内容 证书和密钥库 签署您的调试构建 调试证书的有效期 管理您的密钥 使用 Google Play 应用签名 自行管理您的密钥和密钥库 签署 APK 生成密钥和密钥库 手动签署 AP ...

  2. CSS深入理解之absolute(HTML/CSS)

    absolute和float是同父异母的兄弟,因为它们具有相同点:包裹性与破坏性 absolute的特点 1.独立的,并且可以摆脱overflow的限制,无论是滚动还是隐藏: 2.无依赖,不受rela ...

  3. js判断字符串出现的次数

    // 判断substr字符串在str中出现的次数 isIgnore是否忽略大小写! function countSubstr(str, substr, isIgnore) { var count; v ...

  4. linux 局域网探测工具nmap

    NMap,也就是Network Mapper,是Linux下的网络扫描和嗅探工 具包,其基本功能有三个, 一是探测一组主机是否在线: 其次是扫描主机端口,嗅探所提供的网络服务: 还可以推断主机所用的操 ...

  5. 设置Office 365邮箱默认发送和接收邮件大小限制

    Office 365默认的 35MB 的邮件大小限制.Office 365 最大是支持 150MB 的邮件体积的. 我们只需用 Windows Powershell 连接 Office 365 ,然后 ...

  6. ElasticSearch入坑指南之概述及安装

    ---恢复内容开始--- ElasticSearch入坑指南之概述及安装 了解ElasticSearch ElasticSearch(简称ES)基于Lucene的分布式全文检索引擎.使用ES可以实现近 ...

  7. Visual Studio 下nuget命令的使用

    从Visual Studio 2012版本开始默认集成了Nuget扩展,在Visual Studio 2010或以下的版本需要单独安装,安装方法如下: 1. “工具”→“扩展和更新...”,弹出扩展管 ...

  8. 查询会龄 sql部分

      AND (       case when ${fld:vc_age} = '1' then ((current_date-d.c_idate::date)/30)<3       when ...

  9. 用UIControl封装Button

    用UIControl封装Button 效果 说明 UIControl在处理超出触摸范围的触摸事件时有bug 源码 基础类 // // BaseControl.h // BaseControl // / ...

  10. Linux fsck命令详解

    fsck(file system check)用来检查和维护不一致的文件系统.若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查. fsck常见命令参数 -a:自动修复文件系统,不询问任何 ...