procedure TForm1.ButtonClick(Sender: TObject);
var
IdHttp:TIdHTTP;
PostDataStream:TStringStream;
ParamData:TStringStream;
ParamStr:TStringList;
Html:string;
begin
IdHttp := TIdHTTP.Create(nil);
IdHttp.ProtocolVersion := pv1_1;
IdHttp.Request.Accept := 'application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/QVOD, application/QVOD, application/x-ms-application, application/x-ms-xbap, application/xaml+xml, */*'; //这里有时候会出错,编译不过来的。是不是字符串太长了,我删减了一半就可以编译。
IdHttp.Request.AcceptEncoding := 'gzip, deflate';
IdHttp.Request.AcceptLanguage := 'zh-cn';
IdHttp.Request.CacheControl := 'no-cache';
IdHttp.Request.Connection := 'Keep-Alive';
IdHttp.Request.ContentLength := 371;
IdHttp.Request.ContentType := 'application/x-www-form-urlencoded';
IdHttp.Request.Host := 'passport.cnblogs.com';
IdHttp.Request.Referer := 'http://passport.cnblogs.com/login.aspx';
IdHttp.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET4.0E; .NET4.0C)';
IdHttp.HandleRedirects := True;//以上这些数据是HttpWatch抓包的。不知道对不对。 PostDataStream := TStringStream.Create('');
ParamData := TStringStream.Create('');
ParamStr := TStringList.Create;
// ParamData.WriteString(''); //这个也是同样问题字符串太长就编译不过来了。
ParamStr.Add('__EVENTTARGET=');
ParamStr.Add('__EVENTARGUMENT=');
ParamStr.Add('__VIEWSTATE=%2FwEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt');
ParamStr.Add('__EVENTVALIDATION=%2FwEWBQLWwpqPDQLyj%2FOQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05');
ParamStr.Add('tbUserName=帐号');
ParamStr.Add('tbPassword=密码');
ParamStr.Add('btnLogin=%E7%99%BB++%E5%BD%95');
ParamStr.Add('txtReturnUrl=http%3A%2F%2Fhome.cnblogs.com%2F');
IdHTTP.Post('http://passport.cnblogs.com/login.aspx', ParamStr, PostDataStream);
//运行到这里就提示 HTTP/1.1 500 Internal Server Erro 错误。
postdatastream.Position:=0;
memo1.Text:=Utf8ToAnsi(postdatastream.DataString);
PostDataStream.Free;
ParamData.Free;
ParamStr.Free;
end;怎么解决啊????????还有 IdHTTP.Post 这个Post函数原形只有两个参数,这里为什么会有第三个PostDataStream?????
var
IdHttp:TIdHTTP;
PostDataStream:TStringStream;
ParamData:TStringStream;
ParamStr:TStringList;
Html:string;
begin
IdHttp := TIdHTTP.Create(nil);
IdHttp.ProtocolVersion := pv1_1;
IdHttp.Request.Accept := 'application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/QVOD, application/QVOD, application/x-ms-application, application/x-ms-xbap, application/xaml+xml, */*'; //这里有时候会出错,编译不过来的。是不是字符串太长了,我删减了一半就可以编译。
IdHttp.Request.AcceptEncoding := 'gzip, deflate';
IdHttp.Request.AcceptLanguage := 'zh-cn';
IdHttp.Request.CacheControl := 'no-cache';
IdHttp.Request.Connection := 'Keep-Alive';
IdHttp.Request.ContentLength := 371;
IdHttp.Request.ContentType := 'application/x-www-form-urlencoded';
IdHttp.Request.Host := 'passport.cnblogs.com';
IdHttp.Request.Referer := 'http://passport.cnblogs.com/login.aspx';
IdHttp.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET4.0E; .NET4.0C)';
IdHttp.HandleRedirects := True;//以上这些数据是HttpWatch抓包的。不知道对不对。 PostDataStream := TStringStream.Create('');
ParamData := TStringStream.Create('');
ParamStr := TStringList.Create;
// ParamData.WriteString(''); //这个也是同样问题字符串太长就编译不过来了。
ParamStr.Add('__EVENTTARGET=');
ParamStr.Add('__EVENTARGUMENT=');
ParamStr.Add('__VIEWSTATE=%2FwEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt');
ParamStr.Add('__EVENTVALIDATION=%2FwEWBQLWwpqPDQLyj%2FOQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05');
ParamStr.Add('tbUserName=帐号');
ParamStr.Add('tbPassword=密码');
ParamStr.Add('btnLogin=%E7%99%BB++%E5%BD%95');
ParamStr.Add('txtReturnUrl=http%3A%2F%2Fhome.cnblogs.com%2F');
IdHTTP.Post('http://passport.cnblogs.com/login.aspx', ParamStr, PostDataStream);
//运行到这里就提示 HTTP/1.1 500 Internal Server Erro 错误。
postdatastream.Position:=0;
memo1.Text:=Utf8ToAnsi(postdatastream.DataString);
PostDataStream.Free;
ParamData.Free;
ParamStr.Free;
end;怎么解决啊????????还有 IdHTTP.Post 这个Post函数原形只有两个参数,这里为什么会有第三个PostDataStream?????
解决方案 »
- 求助!关于考勤时间的问题!
- record创建链表的问题
- 郁闷,这样与公司合作不知亏到哪种程度???欢迎大家多多评论,多灌点水!
- 2个问题,分不够请说。在线等。。。。。
- 关于触发器的问题
- 提取数据库中几个字段内容全部填充到stringgrid中问题
- 有没有读.mdb(ms access 2000)的源程序?
- 劳烦各位介绍一下业界最流行实用的汇编,C语言编译器,我是在校生急需指导!
- 谁有modem的所有函数
- 今天真丢脸呀!在座的各位谁能一个小时内在tcontrol的基础上做出一个treeview控件来?
- 如何将操作记录逐行写到程序目录下的TXT文件中,下次写入进接着上次的行数进行写入
- delphi使用embeddedwb控件,伪造javascript来路,现金求助
1.抓包的时候帐号和密码都是明文的。
2.IdHTTP.Post('http://passport.cnblogs.com/login.aspx', ParamStr, PostDataStream);
Delphi查看Post原形,只有两个参数。为什么这里可以填三个呢?
function TIdCustomHTTP.Post(AURL: string; const ASource: TStrings): string; //
大哥,看清楚是几个参数
修改了下面这些值以后,提示HTTP/1.1 405 怎么做啊???
ParamStr.Add('__EVENTTARGET=');
ParamStr.Add('__EVENTARGUMENT=');
ParamStr.Add('&_VIEWSTATE=%2FwEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt');
ParamStr.Add('color=#FF0000]&[/color]_EVENTVALIDATION=%2FwEWBQLWwpqPDQLyj%2FOQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05');
ParamStr.Add('color=#FF0000]&[/color]tbUserName=帐号');
ParamStr.Add('color=#FF0000]&[/color]tbPassword=密码');
ParamStr.Add('color=#FF0000]&[/color]btnLogin=%E7%99%BB++%E5%BD%95');
ParamStr.Add('color=#FF0000]&[/color]txtReturnUrl=http%3A%2F%2Fhome.cnblogs.com%2F');参数前要加color=#FF0000]&[/color]
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP;type
TForm1 = class(TForm)
Button1: TButton;
IdHTTP1: TIdHTTP;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
const BaseURL = 'http://passport.cnblogs.com/login.aspx'; //地址
var
IdHTTP: TIdHTTP;
Params: TStrings;
RStream:TStringStream;
html:string;
begin
RStream:=TStringStream.Create('');
idHTTP:= TidHTTp.create(self);
Params := TStringList.Create;
IdHTTP.AllowCookies := True;
IdHTTP.HTTPOptions:=[hoForceEncodeParams];
IdHTTP.ProtocolVersion := pv1_1;
IDHTTP.Request.Accept:='*/*';
IdHTTP.Request.Referer:='http://passport.cnblogs.com/login.aspx';
IdHTTP.Request.AcceptLanguage := 'zh-cn';
IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
IdHTTP.Request.AcceptEncoding := 'gzip, deflate';
IdHTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0)';
IdHTTP.Request.Host := 'passport.cnblogs.com';
IdHTTP.Request.ContentLength := -1;
IdHTTP.Request.Connection := 'Keep-Alive';
IdHTTP.Request.CacheControl := 'no-cache';
Params.Append('__EVENTTARGET=');
Params.Append('&__VIEWSTATE=/wEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt');
Params.Append('&__EVENTVALIDATION=/wEWBQLWwpqPDQLyj/OQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05');
Params.Append('&[email protected]');
Params.Append('&btnLogin=%E7%99%BB++%E5%BD%95');
Params.Append('&tbpassword=voyeur');
Params.Append('&txtReturnUrl=http://home.cnblogs.com');
try
params.SaveToFile(ExtractFilePath(ParamStr(0))+'my.txt');
html:=Utf8ToAnsi(IdHTTP.Post('http://passport.cnblogs.com/login.aspx',Params));
memo1.Text:=html;
except
showmessage('error');
end;
showmessage(IdHttp.ResponseText);
IdHTTP.Disconnect;
FreeAndNil(IdHTTP);
FreeAndNil(Params);
end;
end.
我发生的是302错误。
这比自己看DELPHI提示错误 方便找原因了