关于用POST向网页提交数据(在线等) (100分)

  • 主题发起人 主题发起人 wzca
  • 开始时间 开始时间
W

wzca

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是 Delphi 7 和 Indy 的 TidHttp 控件
对于有Session的ASP主页进行 Post时
Page1 .... Login 页, 可能设置了Session
Page2 ..... Check.asp 检查 Session 和UserName & Password
UserName & PassWord 没问题
但是出现了 用户过期或已经注消 的字样,
我感觉是Session 没有带过来吧。?
下面是程序,求高手指点
//---------------------------------------------------
用程序提交数据时,有什么办法可以对付 ASP 里的 Session
//----------------------------------------------------
procedure TMainForm.btnRunClick(Sender: TObject);
var
Source: TStrings;
Response: TMemoryStream;
S, Cookie: String;
i: integer;
begin
Response := TMemoryStream.Create;
Source := TStringList.Create;

S := Http.Get(Page1);
Memo1.Text := S;
// 从返回的页面中找出cookie, 并增加到http.Request中
for i := 0 to Http.Response.RawHeaders.Count -1 do
if UpperCase(LeftStr(Http.Response.RawHeaders, 10)) = 'SET-COOKIE' then
begin
Cookie := Trim(Copy(Http.Response.RawHeaders, 12, MaxInt));
Cookie := Copy(Cookie, 1, Pos(';', Cookie) - 1);
Http.Request.RawHeaders.Add('Cookie:'+ Cookie);
end;
// 再去下一页, 先准备数据
Source.Clear;
Source.Add('USERnumber=' + UserName + '&pwd=' + PassWord + '&UserType=0'
+ '&imageField2.x=19&imageField2.y=8');

Memo1.Text := Http.Post(Page2, Source);

Source.Free;
Response.Free;
//----------------------------------------------------
或者用另一种方法。比如内嵌一个 WebBrowers 怎么能让程序
自动去点击,进入到一个特定的主页,这些页的URL应该可以得到的。
 
检查一下session对象的timeout
 
那个ASP不是我的程序呀。没办法了吗? :(
 
用 ICS 更好一些
 
ICS我也试过呀。好象也不行,
有什么可以用的小例子吗?
 
有什么办法可以骗过Session?
用程序模拟IE,一页页的进去。让ASP感觉不出来,就好了。:)
谁有好办法呀?
 
给 地址 来,我测试一下。
 
http://211.98.12.7/personal.asp?menu=8
告诉我,你的mail 或 QQ
我给你用户和密码。
在这里公开好象不太好吧。呵呵
我程序里定义了两个常量
Page1 = 'http://211.98.12.7/personal.asp?menu=8';
Page2 = 'http://211.98.12.7/check.asp';
 
怎么没人回答呀。。。。。。。等得我头发都白了:( [:(]
 
txyqbf_gxx@163.com
 
好象很麻烦的样子;
Post 到 Check.asp 后,Check.asp 判断用户、密码和Session后可能又写Session了。
然后 redirect 另一页了。这页也判Session了。
所以.....
不知道有什么好办法呢?
 
胡乱搞的,什么 session 我不懂,看看如下代码,测试通过:

procedure CommitUrlData(vRefererUrl: OleVariant;
UserField, UserValue, PasswordField, PasswordValue: string;
OtherPostData: OleVariant);
// 内部小函数,把提交字符串写入variant;
function GetPostData(Content: string): OleVariant;
var
I: Integer;
begin
Result := VarArrayCreate([0, length(content)], varByte);
for i := 0 to Length(content) - 1 do
begin
Result := Ord(content[i + 1]);
end;
Result[Length(content)] := 0;
end;
// 内部小函数结束
var
vHeaders, vPostData, vFrame, vFlags, vCommitData: OleVariant;
aWBCommit: TWebBrowser;
begin
aWBCommit := TWebBrowser.Create(nil);
vHeaders := 'Content-Type: application/x-www-form-urlencoded' + #10#13#0;

if VarIsNull(OtherPostData) then
vCommitData := UserField + '=' + UserValue + '&' +
PasswordField + '=' + PasswordValue
else
vCommitData := UserField + '=' + UserValue + '&' +
PasswordField + '=' + PasswordValue + '&' + OtherPostData;
vPostData := GetPostData(vCommitData);
vFlags := 31;
TVarData(vPostData).vType := varArray;
aWBCommit.Navigate2(vRefererUrl, vFlags, vFrame, vPostData, vHeaders);
FreeAndNil(aWBCommit);
end;


调用方式:
CommitUrlData(
'http://211.98.12.7/check.asp',
'USERnumber',YourCode,
'pwd', YourPassword,
NULL);

已经测试通过,如果你测试通不过,我发源代码给你!


 
我的mail: wzca@sina.com
我先去试试。
 
OK , waitting...
 
"对不起,该用户不存在或已经被注销!"
........
把你的程序。给我发过来试一下好吗?wzca@sina.com
对了。你有QQ吗?想多请教你一下。呵呵
,还有,看你的函数,好象不要通过第一页的登陆。
这样也可以吗?
 
多人接受答案了。
 
后退
顶部