delphi如何使用tIdHTTP保持程序连接到站点

时间:2013-10-10 22:48:19

标签: delphi indy

我有一个问题,我可以使用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;

button2

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来获取文件但它失败它显示我没有登录 所以我如何保持我的程序连接,所以我只能再次登录时调用获取页面(在其他按钮中)。

抱歉我的英语不好。

1 个答案:

答案 0 :(得分:1)

您的登录数据格式错误。您不仅错过了用户名和密码字段之间的&,而且您不应该将所有内容都放在单个TStringList条目中。 TIdHTTP期望每个字段在TStringList中都是自己的条目,然后在格式化HTTP请求时将它们编码并连接在一起。

换句话说,改变这个:

  

Data.Add( 'LoginForm的[用户名] = xxxLoginForm [口令] = 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,或者后续请求可能需要指定{{1设置为上一个URL(某些服务器确实需要)。