delphi+indy10 idhttp post登录网站后。怎样保持登录状态。

yinhuai520 2012-03-05 11:02:27
第一次发帖。先谢谢各位。
我查资料的时候 听说 用indy10,idhttp就不管管cookie了。会想webbrowse一样自动保存。但是我测试的时候
发现不是这样的啊。我用idhttp post 能登录成功。但是 我接着用 idhttp get这个网站首页的时候。返回的
源码,并不是登录状态的东西。
我的代码如下:
IdHTTP1.Request.Accept := '*/*';
IdHTTP1.Request.Host := 'www.meilishuo.com';
IdHTTP1.Request.Referer := 'http://www.meilishuo.com/logon';
IdHTTP1.Request.Connection := 'Keep-Alive';
IdHTTP1.HTTPOptions := IdHTTP1.HTTPOptions + [hoKeepOrigProtocol];
IdHTTP1.ProtocolVersion := pv1_1;
IdHTTP1.AllowCookies := True;
Params1.Append('emailaddress=bucuodfsafsa');
Params1.Append('password=870527');
Params1.Append('savestate=true');
Params1.Append('type=undefined');
Params1.Append('follow=0');
Params1.Append('wbid=0');
Params1.Append('redirect=http%3A%2F%2Fwww.meilishuo.com%2Fwelcome');

url := 'http://www.meilishuo.com/users/ajax_logon?frm=undefined';
IdHTTP1.HandleRedirects := true;

s := idhttp1.Post(url, Params1);


到这里 post结果 能成功登录。

下面我接着写的 :

cookie := '';
for i := 0 to IdCookieManager1.CookieCollection.Count - 1 do begin
cookie := cookie + IdCookieManager1.CookieCollection.Items[i].CookieText;
end;
IdHTTP1.Request.RawHeaders.Add('cookie: ' + cookie);


//为idhttp cookie 赋值(我不知道是否需要这个步骤indy10);
s := IdHTTP1.Get('http://www.meilishuo.com/welcome');

想通过get取源码。 发现返回的s 并不是登录后的东西。不明白为什么。呢

网上也听说 要和 cookiemaneger一起用。我也测试过。始终。不行。谢谢各位大侠。
帮个忙。



...全文
508 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzcenter 2012-03-05
  • 打赏
  • 举报
回复
把cookie都放这里
idhtp1.Request.CustomHeaders.Add('Cookie:' + mmo4.Text);
hzcenter 2012-03-05
  • 打赏
  • 举报
回复
我这里测试是没有问题的了!就是用

IdHttp1.Request.CustomHeaders.Add
yinhuai520 2012-03-05
  • 打赏
  • 举报
回复
您有QQ 吗。 我加您。我的QQ:2216185275
yinhuai520 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 case5166 的回复:]

引用 7 楼 case5166 的回复:
引用 5 楼 yinhuai520 的回复:
erhan 您的 那个 leftBstr 是不是要引用哪个单元啊
StrUnits
StrUtils打错字了汗,,
[/Quote]


mStr这个的值始终是 空呢。
我看见佛 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 case5166 的回复:]
引用 5 楼 yinhuai520 的回复:
erhan 您的 那个 leftBstr 是不是要引用哪个单元啊
StrUnits
[/Quote]StrUtils打错字了汗,,
yinhuai520 2012-03-05
  • 打赏
  • 举报
回复
谢谢 你们哈 。我还是不行。引用 strunits也 引用不起。你们能帮我 弄个damo吗。谢谢了啊。100元 意思下。酬谢了。
我看见佛 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yinhuai520 的回复:]
erhan 您的 那个 leftBstr 是不是要引用哪个单元啊
[/Quote]StrUnits
yinhuai520 2012-03-05
  • 打赏
  • 举报
回复
谁能给我个damo啊。实现:
idhttp post 登录www.meilishuo.com。
然后 用idhttp get 首页源码 的时候 能取到 自己的信息。

current_user = {
'id': 6948928,
'nickname': 'yinhuai520',
'avatar': 'http://imgtest.meiliworks.com/ap/c/a9/ab/118ec1970d941e7c3af61c504403_90_90.jpg'
};


即源码的 currentuser 有值。没在登录状态下 都为 0 。

谢谢各位了。 100 RMB 奉上。
万分感谢哈 100元。小弟没什么钱。意思一下
yinhuai520 2012-03-05
  • 打赏
  • 举报
回复
erhan 您的 那个 leftBstr 是不是要引用哪个单元啊
erhan 2012-03-05
  • 打赏
  • 举报
回复
没indy10,indy9下是这样用的,你看下indy10可以不

idhttp1.Post(mURL1, Params1);
mStr := IdHttp1.Response.CustomHeaders.Values[ 'Set-Cookie'];
if Pos( ';',mStr)> 0 then
Session_ID := LeftBStr(mStr,Pos( ';',mStr)-1)
else
Session_ID := mStr;

IdHttp1.Request.CustomHeaders.Add( 'Cookie:' + Session_ID);
IdHttp1.Get(mURL2);
hzcenter 2012-03-05
  • 打赏
  • 举报
回复
我用那个customheaders的就可以。你试下吧
yinhuai520 2012-03-05
  • 打赏
  • 举报
回复
楼上的。谢谢 回复。您能说具体点吗?

cookie := '';
for i := 0 to IdCookieManager1.CookieCollection.Count - 1 do begin
cookie := cookie + IdCookieManager1.CookieCollection.Items[i].CookieText;
end;
IdHTTP1.Request.RawHeaders.Add('cookie: ' + cookie);


这个 和您的那句话 意思是一样的吧?

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧