【发布时间】:2013-01-26 23:54:41
【问题描述】:
我在使用 Delphi 和 Indy 9/10 从特定 Web 服务器接收 favicon.ico 时遇到问题。其他服务器工作正常。问题不在于此 Web 服务器,因为 wget 命令行实用程序可以正确获取文件。
这是 wget 的输出:
c:\a>wget http://perforce.eigenbase.org:8080/favicon.ico
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = c:/progra~1/wget/etc/wgetrc
--2013-01-27 00:12:39-- http://perforce.eigenbase.org:8080/favicon.ico
Resolving perforce.eigenbase.org... 72.14.190.177
Connecting to perforce.eigenbase.org|72.14.190.177|:8080... connected.
HTTP request sent, awaiting response... 200 No headers, assuming HTTP/0.9
Length: unspecified
Saving to: `favicon.ico'
[ <=> ] 2.862 --.-K/s in 0s
2013-01-27 00:12:40 (143 MB/s) - `favicon.ico' saved [2862]
这是我的 Delphi Indy 9/10 示例代码。它会生成一个“正常关闭连接”异常,结果是一个空字符串。
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
s := '';
try
s := IdHTTP1.Get('http://perforce.eigenbase.org:8080/favicon.ico');
except
on E: Exception do
begin
{$IFDEF DEBUG}ShowMessage('get error:'+E.Message){$ENDIF};
end;
end;
ShowMessage(IntToStr(Length(s)));
end;
如果我在不同的服务器上尝试相同的代码,例如:
s := IdHTTP1.Get('http://www.google.com/favicon.ico');
一切正常。
是否有解决方法可以使用 IdHTTP1.Get 从服务器获取 http://perforce.eigenbase.org:8080/favicon.ico 文件?
【问题讨论】:
-
更改
Request.UserAgent的IdHTTP1组件,例如到Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1,你会没事的。服务器拒绝你(以正式的方式)只是因为你充当默认的Mozilla/3.0 (compatible; Indy Library)代理(相当残忍的政策,但确实如此)。 -
无论如何,您不必以字符串形式接收
Get响应。由于您显然正在下载一个文件,因此您不会以文本形式显示(为什么要将图标显示为文本文件),但您可能会像处理文件一样保存或操作它,您可以使用Get重载,它接收对流的响应。
标签: delphi http indy indy10 indy-9