-3

我有一个问题,我可以使用 tIdhttp 毫无问题地连接到我想要的网站,但问题是我无法从其他按钮连接。

我已经在函数之外声明了这些变量..这会有所帮助,但它没有

var
  Form1: TForm1;
   HTTP : TIDHTTP;
 Cookie : TidCookieManager;

implementation

{$R *.dfm}

这在函数中

    HTTP := TIDHTTP.Create(NIL);
     Cookie := TidCookieManager.Create(nil);



     HTTP.Request.UserAgent := 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser 1.98.744; .NET CLR 3.5.30729)';
     HTTP.Request.Accept := 'text/html, */*';
     HTTP.Request.CacheControl := 'no-cache';
     HTTP.AllowCookies := True;
     HTTP.HandleRedirects := True;
     HTTP.ProtocolVersion := pv1_1;
     HTTP.CookieManager := Cookie;
     HTTP.RedirectMaximum := 15;

    Data := TStringList.Create;
 Page := TStringList.Create;

 Data.Add('LoginForm[username]=xxxLoginForm[password]=xxx&LoginForm[rememberMe]=0');
Page.Text :=  HTTP.Post('http://somesite.com/login.html',Data);


 If Pos('>Logout', Page.Text) = 0 Then Result := False
 else Result := True;



 Page.Free;
 Data.Free;
// HTTP.Free;
end;

按钮2

HTTP.Get('http://somesite.cc/info/523364d0/'); // this does not work it show that im not connected ..but the function already connected to the site.

在button1中我可以使用我的功能成功连接(登录到一个站点)然后我使用HTTP.get点击button2来获取文件但它失败了它表明我没有登录所以我怎样才能让我的程序保持连接所以我只能在没有再次登录的情况下调用获取页面(在其他按钮中)。

对不起,我的英语不好。

4

1 回答 1

1

您的登录数据格式错误。您不仅&在用户名和密码字段之间缺少一个,而且您不应该将所有内容都放在一个TStringList条目中。 TIdHTTP期望每个字段在TStringList.

换句话说,改变这个:

Data.Add('LoginForm[username]=xxxLoginForm[password]=xxx&LoginForm[rememberMe]=0');

对此:

Data.Add('LoginForm[username]=xxx');
Data.Add('LoginForm[password]=xxx');
Data.Add('LoginForm[rememberMe]=0');

如果这仍然不起作用,那么问题必须与 HTTP 会话有关。服务器在登录时发送TIdCookieManager拒绝的 cookie,或者TIdCookieManager在对同一 HTTP 服务器的后续请求中未将 cookie 发送回,或者后续请求可能需要指定Referer设置为前一个 URL 的 cookie(某些服务器确实需要)。

于 2013-10-11T01:13:20.673 回答