【问题标题】:idHTTP Returns <!DOCTYPE html> erroridHTTP 返回 <!DOCTYPE html> 错误
【发布时间】:2014-11-23 18:35:34
【问题描述】:

我想要实现的是使用 idhtp1.GET 从网页返回一些数据 当我这样做时:

sGeo := RemoveWhiteSpace('http://www.robin-william.net/Osiris/geo.php?ip=IPHERE');
redt1.Lines.Add(idhtpGeo.Get(sGeo));

效果很好,但是一旦我这样做了:

sGeo := RemoveWhiteSpace('http://www.robin-william.net/Osiris/geo.php?ip=' + sData);

(添加 sData)它给了我错误 DOCTYPE html。

以下是部分来源:

procedure TfrmMap.GetGeo(sData : string);
begin
  try
  idhtpGeo.ConnectTimeout := 5000;
  idhtpGeo.HandleRedirects := True;
  sGeo := RemoveWhiteSpace('http://www.robin-william.net/Osiris/geo.php?ip=' + sData);
  redt1.Lines.Add(sGeo);
  redt1.Lines.Add(idhtpGeo.Get(sGeo));
  except
    MessageDlg('Failed to load Geo Data!', mtError, [mbOK], 0);
  end;
end;  

sData 只是 IP。我还尝试使用 SynaCode 单元对 URL(sGeo) 进行编码,它没有给我任何错误,但返回的数据不正确。

编码后的 URL 如下所示:

http://www.robin-william.net/Osiris/geo.php?ip=88.106.170.45%0A

任何帮助将不胜感激。

【问题讨论】:

  • 您使用的是什么版本的 Indy?我无法使用最新的 Indy 10 SVN 快照重现该问题。 Get() 成功返回,即使 IP 参数格式错误。即使确实发生了错误,&lt;!DOCTYPE html&gt; 也不应该在异常的 Message 属性中(调试器通知显示),它应该在异常的 ErrorMessage 属性中(调试器通知不显示)。
  • 如果我没有弄错我正在使用 indy 7。虽然不是 100% 肯定。是的,它显示的消息很奇怪,我尝试谷歌搜索但没有结果。但问题是 sData 只需要修剪即可。
  • 没有 Indy 7。Indy 8 附带了 Delphi 6(我忘记了 Delphi 7 附带的 Indy 版本)。在 8 岁之前,Indy 被称为 WinShoes。
  • 对不起,我需要使用 indy 10

标签: html delphi delphi-7 indy http-get


【解决方案1】:

没关系,我发现了问题。只需要修剪名为 sData 的字符串。

【讨论】:

  • 或许最好正确设置 sData 以开始
猜你喜欢
  • 2021-04-01
  • 1970-01-01
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
相关资源
最近更新 更多