【问题标题】:Delphi XE3 Indy Stuck and not returningDelphi XE3 Indy 卡住并且没有返回
【发布时间】:2013-09-02 17:51:41
【问题描述】:

我无法让 Indy 返回某些 URL,我不确定发生了什么。我有一些非常简单的测试代码来返回我想要的 URL 并将 HTML 放入 TMemo。

With IdHTTP Do
Begin
  s := Get(txtURL.Text);
  txtOutput.Lines.Add('-------' + sLineBreak + sLineBreak + s);
End;

然而,当我尝试使用此网址时:- http://nuediamonds.com/synthetic_diamond_rings.php 它永远不会返回,只会锁定。我添加了一个 OnWork 事件,但我在那里看到的只是内容长度始终为 -1

请问有人有什么想法吗,我急需解决这个问题。

问候 安东尼

【问题讨论】:

  • 您可以在没有代理的情况下在您的网络浏览器中访问该 URL 吗?
  • 是的,它可以在网络浏览器 (Firefox) 中正常运行。

标签: delphi indy indy10 idhttp


【解决方案1】:

使用当前的 Indy 10 SVN 快照,您显示的 URL 对我来说效果很好。它不会卡住。

至于为什么ContentLength 属性为-1,当没有Content-Length 标头存在时会发生这种情况。这可能是由于以下几个原因之一:

  1. 存在Transfer-Encoding 标头并指定正在使用chunked 编码。分块数据会自行终止。

  2. 存在Content-Type 标头,指定 MIME multipart/... 正在发送数据,例如 multipart/byteranges。 MIME 会自行终止。

  3. 通过让服务器关闭连接来终止 HTTP 响应。

参考RFC 2616 Section 4.4“消息长度”。了解更多详情。

【讨论】:

  • 我不知道该抓住哪个印地。我正在使用以下网址:-svn.atozed.com:444/svn/Indy10 我可以看到 10.6.0 XE4,但没有看到 XE3。即使是 XE3,我也要抢 10.6 版本吗?顺便说一句:我使用的是 XE3 中内置的 Indy 版本
  • 是的,获取最新的。它支持一直到 D5 的 Delphi 版本。并确保您阅读了installation instructions
  • 嗨 Remy,删除了我之前的评论。我没有正确阅读该文档,并且 /lib 文件夹下仍有一些文件。我现在已经完全安装并且是最新的。尝试了我的测试程序并仍然锁定:( [Indy 10.6.0.0]
  • 就像我说的,当我使用最新的 Indy 时,您显示的代码和 URL 对我来说很好用。当我调用TIdHTTP.Get('http://nuediamonds.com/synthetic_diamond_rings.php') 时,它不会冻结并按预期退出。你能用SSCCE 来更新你的问题吗?或者,至少,当TIdHTTP 为您冻结时,您能否提供 Wireshark 或TIdLog... 捕获 HTTP 流量?也许 HTTP 服务器向我发送的响应与发送给您的响应不同,并且可能对您的响应格式不正确或在某种程度上混淆了TIdHTTP
  • 呸!我为 SSCCE 创建了一个新测试,你猜怎么着,它运行正常,哈哈
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多