我想让程序自动访问此网站http://ringzer0team.com/ 我需要的一切(用户,通行证,csfr)我有,但如何保持HTTP - 连接在pascal?我使用http://posttestserver.com/来测试方法帖子。 这是我的代码。当我检查login.html文件时。它说HTTP_CONNECTION = close 所以我想知道如何保持它。
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,StdCtrls, httpsend,synacode;
procedure TForm1.Button2Click(Sender: TObject);
var
URL: string;
Params: string;
Response: TMemoryStream;
i:longint;
S:ansistring;
cs:string;
begin
httpClient:= THTTPSend.Create;
if httpClient.HTTPMethod('GET', 'http://ringzer0team.com/login') then
httpClient.Document.SaveToFile('1.txt');
httpClient.Free;
system.assign(fi,'1.txt');
reset(fi);
for i:=1 to 62 do readln(fi,S);
cs:=copy(S,21,32);
system.close(fi);
Response := TMemoryStream.Create;
try
URL := 'http://posttestserver.com/post.php?dump&html';
Params := 'username=' + EncodeURLElement('user') + '&' + 'password=' + EncodeURLElement('pass') + '&' + 'csrf=' + EncodeURLElement(cs);
system.assign(fi,'text');
if HttpPostURL(URL, Params, Response) then Response.SaveToFile('login.html');
finally
Response.Free;
end;
end;
答案 0 :(得分:0)
我可以建议你使用更简单的方法。看: 首先,复制我的"解析器" -function:http://pastebin.com/u7C2xM67
其次,您不必将服务器答案作为文件保存到您的电脑上,因为它可以这样做: 复制我的功能" GetHTTPStr"来自http://pastebin.com/dxHLYERq并将其用作
someStringVariable := GetHttpStr(httpClient)
使用函数"解析器"你也可以获得csrf-token。这就像
//我使用" res"变量为"响应" string,只需要生成res:string变量并使用res:= GetHttpStr(httpClient)
cs := parser(res, "var _", ";");
//现在cs看起来像6a5b8e94 =' token_here' 并从自己获得令牌
cs := parser(cs, #39, #39); //#39 is a code of symbol '
所以我们从'解析到'获得我们需要的令牌
要将数据发布到服务器,您可以使用httpClient.HTTPMethod函数。 首先,您需要将您的帖子数据放入请求正文中,您可以使用
进行var params:string; //your post data, it must have view like param1=value1¶m2=value2
httpClient.Document.Write(Pointer(params)^, Length(params)); //it adds your data into request body
现在,您可以使用httpClient.HTTPMethod('POST','ringzer.com/login');
每次发送POST请求时都不要忘记更改请求content-type
标头。可以使用httpClient.mimeType := 'application/x-www-form-urlencoded';
来完成
如果您执行了POST请求并且希望将来使用httpsend-object来生成get-request,则应将其更改回text/html
回答您的问题,如果您想要发出非关闭请求,可以向httpsend-object添加标题:
httpClient.Headers.Add('Connection: keep-alive'); //Headers has a tstringlist type
请勿忘记在使用httpClient.clear;