我有一个问题,我可以使用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来获取文件但它失败它显示我没有登录 所以我如何保持我的程序连接,所以我只能再次登录时调用获取页面(在其他按钮中)。
抱歉我的英语不好。答案 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(某些服务器确实需要)。