使用Indy&Delphi 7从受保护的网页获取html源代码时出现问题

使用Indy&Delphi 7从受保护的网页获取html源代码时出现问题,delphi,indy10,Delphi,Indy10,使用delphi的Indy10组件,我获取了一个网页的源代码,并使用以下代码将其显示在备忘录控件中 当我试图显示的页面只是一个普通页面时,即不需要登录,结果很好,但是如果我试图获取需要登录的页面的源代码,那么结果是备忘录显示了登录页面的源代码,而不是我请求的页面,尽管我在Firefox和IE浏览器中都登录了该站点 因此,我的问题是,如何使用Indy组件对网站进行身份验证,从而获得登录后在浏览器中查看页面时所获得的相同来源 Thx, Douglas您应该花一些时间来了解整个HTTP的工作原理,因为

使用delphi的Indy10组件,我获取了一个网页的源代码,并使用以下代码将其显示在备忘录控件中

当我试图显示的页面只是一个普通页面时,即不需要登录,结果很好,但是如果我试图获取需要登录的页面的源代码,那么结果是备忘录显示了登录页面的源代码,而不是我请求的页面,尽管我在Firefox和IE浏览器中都登录了该站点

因此,我的问题是,如何使用Indy组件对网站进行身份验证,从而获得登录后在浏览器中查看页面时所获得的相同来源

Thx,
Douglas

您应该花一些时间来了解整个HTTP的工作原理,因为有时候它比看起来更复杂。浏览器所做的不仅仅是简单地发出带有URL的HTTPGET或POST请求,然后返回一些HTML。例如,它们存储了很多关于访问站点的信息,因为HTTP头包含了很多有用的信息。他们如何做到这一点通常是特定于浏览器的,而不是整个系统。其他浏览器或应用程序可能无法看到或使用它们。
您必须为给定站点正确设置HTTP头,并处理身份验证等情况。具有身份验证的站点可以使用多种技术来允许访问,从简单的登录页面到HTTP身份验证方法。他们可以将您重定向到处理身份验证的页面,尽管对于已经登录的用户来说,这种情况可能会偶尔发生,但浏览器或应用程序会看到发生了什么,并且必须处理这些情况。

您应该花些时间来了解整个HTTP的工作原理,因为有时候它比看起来更复杂。浏览器所做的不仅仅是简单地发出带有URL的HTTPGET或POST请求,然后返回一些HTML。例如,它们存储了很多关于访问站点的信息,因为HTTP头包含了很多有用的信息。他们如何做到这一点通常是特定于浏览器的,而不是整个系统。其他浏览器或应用程序可能无法看到或使用它们。
您必须为给定站点正确设置HTTP头,并处理身份验证等情况。具有身份验证的站点可以使用多种技术来允许访问,从简单的登录页面到HTTP身份验证方法。他们可以将您重定向到处理身份验证的页面,尽管对于已登录的用户,这种情况可能会发生,但浏览器或应用程序会看到发生了什么,并且必须处理这些情况。

这是因为Indy只为您传输

Indy不进行登录;网站上有。 一个网站有几十种登录方式。 大多数登录都需要web浏览器的支持

因此,您很可能需要模拟web浏览器的功能。 这包括支持网站用于登录的所有技术。 这可能包括cookie、额外的HTTP头、HTML5、JavaScript、Flash或其他功能

为很多工作做好准备


-杰罗恩

那是因为印地只为你提供交通服务

Indy不进行登录;网站上有。 一个网站有几十种登录方式。 大多数登录都需要web浏览器的支持

因此,您很可能需要模拟web浏览器的功能。 这包括支持网站用于登录的所有技术。 这可能包括cookie、额外的HTTP头、HTML5、JavaScript、Flash或其他功能

为很多工作做好准备


-jeroen

如果登录信息保存在cookie中,那么您需要在http头中发送这样的cookie。我想我可能需要做类似的事情。我必须承认Indy的文档在这种情况下并没有太大的帮助,所以如果您知道一些帮助实现这一点的示例,我将不胜感激。如果所讨论的网站使用的是登录页面而不是真正的HTTP身份验证响应代码,那么您对此无能为力。您必须解析登录页面的HTML,确定必要的输入值,然后根据登录表单的要求,通过另一个Get或Post请求将其提交回服务器。如果登录信息保存在cookie中,则您需要在http头中发送此类cookie。我想我可能需要这样做。我必须承认Indy的文档在这种情况下并没有太大的帮助,所以如果您知道一些帮助实现这一点的示例,我将不胜感激。如果所讨论的网站使用的是登录页面而不是真正的HTTP身份验证响应代码,那么您对此无能为力。您必须解析登录页面的HTML,确定必要的输入值,然后根据登录表单的要求,通过另一个Get或Post请求将其提交回服务器。我明白了,谢谢
谢谢大家的回复。我只是假设我需要进入IdCookieManager组件,但不知何故从未使用过它,所以我问这个问题的原因是什么,但我发现还有很多问题。我会研究一下,但同时我想我会用TWebBrowser组件把一些东西拼凑在一起,虽然效率不高,也不漂亮,但它很容易为您管理cookies。您不需要自己对TIdCookieManager做任何事情。如果您没有提供,TIDWTTP会在内部为您创建一个。我知道了,谢谢大家的回复。我只是假设我需要进入IdCookieManager组件,但不知何故从未使用过它,所以我问这个问题的原因是什么,但我发现还有很多问题。我会研究一下,但同时我想我会用TWebBrowser组件把一些东西拼凑在一起,虽然效率不高,也不漂亮,但它很容易为您管理cookies。您不需要自己对TIdCookieManager做任何事情。如果您没有提供,TIDWTTP会在内部为您创建一个。谢谢您的回复。我会调查的。你可以使用Wireshark或Fiddler等工具查看实际交换的内容。谢谢你的回复。我会调查的。你可以用Wireshark或Fiddler之类的工具来看看到底交换了什么。

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Text := IdHTTP1.Get(Edit1.Text);
end;