【发布时间】: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 参数格式错误。即使确实发生了错误,<!DOCTYPE html>也不应该在异常的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