Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html Delphi-从代码登录到网页_Html_Delphi_Post_Delphi 7_Indy - Fatal编程技术网

Html Delphi-从代码登录到网页

Html Delphi-从代码登录到网页,html,delphi,post,delphi-7,indy,Html,Delphi,Post,Delphi 7,Indy,我正在使用Delphi7,需要一些帮助来解决一个问题,是的,我到处都在搜索答案,但是提供的代码没有文档记录,所以我不知道它是如何工作的,也不知道如何调整它以满足我的需要 我试图实现的是登录到该网站 我遇到的问题是,当我的程序对该网站的HTML进行一些处理时,我需要保持登录状态(基本上我想解析某个系列的下载链接,但我需要登录才能查看所述链接) 我没有可以提供的代码,因为我在搜索解决方案时看到的代码都没有多大意义,但是,我知道需要做什么。我认为使用一些POST方法向网站提供用户名和密码将是一个开始,

我正在使用Delphi7,需要一些帮助来解决一个问题,是的,我到处都在搜索答案,但是提供的代码没有文档记录,所以我不知道它是如何工作的,也不知道如何调整它以满足我的需要

我试图实现的是登录到该网站

我遇到的问题是,当我的程序对该网站的HTML进行一些处理时,我需要保持登录状态(基本上我想解析某个系列的下载链接,但我需要登录才能查看所述链接)

我没有可以提供的代码,因为我在搜索解决方案时看到的代码都没有多大意义,但是,我知道需要做什么。我认为使用一些POST方法向网站提供用户名和密码将是一个开始,从那时起,我不确定是否会继续登录

我可能把这个问题复杂化了,也许有一个简单的方法可以解决这个问题,这就是为什么我选择了一个我通常从中获得所有答案的网站,我希望我能很好地解释这个问题,并能找到一些帮助

我不需要源代码,因为我在这里没有提供任何源代码,但即使是一些可以向我解释这个过程的有用链接,也将不胜感激

在这里,我创建了一个简单的图像拼贴,以巩固我对问题的解释:


谢谢你的时间,我希望我能在这个问题上找到一些清晰的思路

您需要首先
Get()
包含webform的网页,让它生成它需要的任何cookie,并让
TIdHTTP
捕获它/它们(如果未将
TIdCookieManager
附加到
TIdHTTP.CookieManager
属性,
TIdHTTP
在内部创建
TIdCookieManager
),则可以将所需的网络表单数据提交到相应的网页,并且
TIdHTTP
将包含任何相关cookie)它目前正在持有。例如:

// get cookies first...
IdHTTP1.Get('http://kissanime.com/login');

// now submit the webform...
Params := TStringList.Create;
try
  Params.Add('username=' + UserName);
  Params.Add('password=' + Password);
  Params.Add('chkRemember=1'); // <-- omit this if you do not want to enable the webform's "Remember me" option
  Params.Add('btnSubmit=');
  Params.Add('redirect=');

  IdHTTP1.Post('http://kissanime.com/login', Params);
finally
  Params.Free;
end;
//首先获取cookies。。。
IdHTTP1.Get('http://kissanime.com/login');
//现在提交网络表单。。。
Params:=TStringList.Create;
尝试
参数Add('username='+username);
参数Add('password='+password);

Params.Add('chkrember=1');//我认为您只需要将
TIdCookie
附加到您的
TIdHTTP
对象上。Cookie通常用于存储您的会话。如果您在登录后未根据请求提供会话,网站将重新将您重定向到登录页面。谢谢,我将尽快对此进行测试,因此现在唯一的问题仍然存在我需要一种方法将初始登录请求发送到站点…您不需要“将
TIdCookie
附加到您的
TIdHTTP
”(可能您想的是
TIdCookieManager
)。您首先
Get()
包含Web表单的网页,并让它生成任何cookie它需要并让
TIdHTTP
捕获它/它们(如果您没有附加
TIdCookieManager
TIdHTTP
在内部创建一个),然后
Post()
将所需的网络表单数据发送到相应的网页,并且
TIdHTTP
将包含任何相关的cookie它目前正在运行。我尝试了您的解决方案,当我运行代码时,我得到了一个HTTP/1.1 403禁止的错误?编辑:我通过添加以下内容解决了403错误:
IdHTTP1.Request.UserAgent:=“Mozilla/5.0(Windows NT 6.1;WOW64;rv:12.0)Gecko/20100101 Firefox/12.0”;
出于某种原因感谢您的帮助(尽管您的代码与我看到的其他代码类似)我更了解这些,但我唯一的问题是,此登录是否会持续到程序的剩余生命期(直到我关闭它)登录将一直持续,直到您注销或服务器自行结束HTTP会话(以先发生的为准)。只要您继续使用相同的登录名/cookie向服务器发出HTTP请求,HTTP会话应保持活动状态。但一旦停止发送请求,服务器将最终超时。HTTP是一种无状态协议,确实如此请求之间不需要持久的TCP连接(这就是HTTP Cookie存在的主要原因——在非持久性连接之间持久化数据。HTML5的本地存储正试图取代Cookie作为首选的持久性系统)。感谢您的解释,感谢您解决我的问题,我对此表示感谢:D