【发布时间】:2013-04-06 00:52:02
【问题描述】:
我有一个在所有浏览器中都可以正常工作的 URL(在 2 台计算机上测试了 5 个),但是如果我尝试使用 Indy Http 客户端的 Get() 获取页面内容,它会返回错误代码 404,找不到页面.这是最新的 Indy SVN 版本 (4985)。
为什么这个网络服务器为 Indy 返回代码 404,而为每个浏览器返回代码 200?
我怀疑这可能是 Indy 中的错误,因为 URL 中的“#”字符(Indy 将 # 之后的所有内容都切断了)。如果是这样,有什么办法可以解决这个问题。也许用转义码替换 # 字符?
这是我的示例代码。所需要的只是带有 Indy 组件的 Delphi 以及带有按钮和备忘录的表单。
procedure TForm1.Button1Click(Sender: TObject);
var HTTPCLIENT1: TIdHTTP;
begin
try
try
HTTPCLIENT1 := TIdHTTP.Create(nil);
Memo1.Clear;
with HTTPCLIENT1 do
begin
HandleRedirects := True;
Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31';
Memo1.Text := Get('http://www.visionofhumanity.org/gpi-data/#/2011/scor/');
Caption := ResponseText;
end;
except
On e: Exception do
begin
Memo1.Lines.Add('Exception: '+e.Message);
end;
end;
finally
HTTPCLIENT1.Free;
end;
end;
【问题讨论】:
-
根据the answer to your previous question,修订版 4985 应该可以解决该问题。你确定你已经正确安装了吗?您是否使用过 WireShark 比较浏览器发送的内容与您的程序发送的内容?
-
我同意 Rob 的观点。我修复了那个错误,所以
#和它之后的所有东西都不会再发送到服务器了。我会再次检查,但上次肯定工作正常。 -
@RobKennedy 这是另一个问题。另一篇文章是关于在 URL 中使用锚点获取错误代码 500。这是固定的。这个问题是关于在 URL 中获取没有锚点的代码 404。
-
@Casady:就像 Rob 所说,您应该使用 Wireshark 或其他数据包嗅探器来诊断此类问题。您之前的问题是由于 Indy 发送的 URL 与浏览器发送的 URL 不同,导致一系列重定向最终在服务器端失败。这个问题很可能类似。因此,您需要确保 Indy 实际上发送的 URL 与浏览器发送的 URL 相同。
-
@RemyLebeau 你是对的。这个问题类似但不一样,出于某种原因,Indy 不会从 URL 中删除锚点,即使在 build 4985 中也是如此。