读书人

请问一下IdHTTP post登录网站的做法

发布时间: 2012-02-03 22:02:47 作者: rapoo

请教一下,IdHTTP post登录网站的做法
想做一个读取邮箱的功能,这里用的是TOM的邮箱.

代码如下

procedure TForm1.LoginTomClick(Sender: TObject);
var
sPackage:Tstrings;
begin
IdHTTP1.ReadTimeout:=20000;
IdHTTP1.AllowCookies:=true;
if Assigned(IdHTTP1.CookieManager) then
IdHTTP1.CookieManager.CookieCollection.Clear;
IdHTTP1.Request.Referer:='';
IdHTTP1.HandleRedirects:=true;
IdHTTP1.HTTPOptions:=[hoKeepOrigProtocol]; //hoForceEncodeParams
IdHTTP1.ProtocolVersion:=pv1_1;
IdHTTP1.Request.Connection:='keep-alive';
IdHTTP1.Request.AcceptLanguage:='zh-cn,en-US;q=0.5';
IdHTTP1.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727)';

sCookList := 'tom_test=djx867uzU!60!5!1270773219!1271473890!13!1271470436!http://mail.tom.com/!;'+
' vjuids=3dfe4b0e9.127dffc8129.0.5ba212ffc6e89; vjlast=1270773220.1271468863.11; '+
'TOM_USERNAME=likeyrain; ad_-.-AD-.-=m5UeE1yLG!16!4!1270775139!3!698752!8!0!0!null!!1271473891!!!; TUV=1271041674484841; name=postmailtest@tom.com%20%20';

HostUrl:='http://mail.tom.com';
creferer:='http://www.tom.com';

sPackage:=TstringList.Create;
sPackage.Add('type = 0');
sPackage.Add('user = postmailtest');
sPackage.Add('in_username = postmailtest@tom.com');
sPackage.Add('pass = 123456');
sPackage.Add('style = 21');
sPackage.Add('verifycookie = y');

IdHTTP1.Request.Referer:=creferer;
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
memo1.Lines.Text := IdHTTP1.Post(HostUrl, sPackage);
sPackage.Free;
end;

但是这样反回的,并不是登录成功的内容,不知道上面是哪里错了,或者还有什么事情没做?

[解决办法]
诸如此类数据你是如何得到的
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727)';

推举用WSockExpert 截取一下,看看和你上面的有差别没有。

感觉你截取的少了一些参数

[解决办法]
看它返回什么错误给你,然后你根据错误信息更改
[解决办法]
“http/1.1 405 method not allowed”,网上查的结果是邮箱服务器不容许静态POST,还有什么其他办法不?

这个就没办法了,换个邮箱服务器。
[解决办法]
使用代理

读书人网 >.NET

热点推荐