我写一个通过HTTP 80端口来传输文件的程序,要上传的目标WEB服务器是PHP做的,并且上传是有用户名和口令的。
现在可以通过TIdhttp取得WEB服务器的cookie,但我要上传文件时不知如何把cookie添加到TidHTTP.post中,请各位大虾帮帮忙如何实现啊?!
取得cookie的部分代码如下:
......
try
postList.Add('name=hj');
postList.Add('passd=38888888');
IdHttp1.AllowCookies:=true;
IdHTTP1.Post( httpid,postList,Response);
finally
Edit1.Text := IdHTTP1.Response.Server + ': ' + IdHTTP1.Response.ResponseText;
Memo1.Lines.Add(Response.DataString);
......
现在可以通过TIdhttp取得WEB服务器的cookie,但我要上传文件时不知如何把cookie添加到TidHTTP.post中,请各位大虾帮帮忙如何实现啊?!
取得cookie的部分代码如下:
......
try
postList.Add('name=hj');
postList.Add('passd=38888888');
IdHttp1.AllowCookies:=true;
IdHTTP1.Post( httpid,postList,Response);
finally
Edit1.Text := IdHTTP1.Response.Server + ': ' + IdHTTP1.Response.ResponseText;
Memo1.Lines.Add(Response.DataString);
......
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[i] := 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;
我想再问一下,我把所取得的cookie内容是不是放在OtherPostData中呢?
//我用IdHTTP1.cookiemanager:=Idcookiemanager1,然后调用Idcookiemanager1.cookiecollect.item[i]...取得的cookie,应该不需要解析吧?!
我调用方式是:
cookie1,httpid:OleVariant;
cookie:=IdCookieManager1.CookieCollection.Items[0].CookieText;
httpid:='http://52.96.191.188/webftp/index.php';
CommitUrlData(httpid,user,gz,passd,inttostr(388888),cookie1);
为总提示“invalid variant type”
var
Post : TStringList;
begin
if not mLoggedIn then
begin
Post := TStringList.Create;
Post.Add('continue=http://gmail.google.com/gmail');
Post.Add('service=mail');
Post.Add('Email='+mUserName+'@gmail.com');
Post.Add('Passwd='+mPassword);
Post.Add('null=Sign in');
mHTTP.Request.Referer := 'https://www.google.com/accounts/ServiceLoginBox?service=mail&continue=http%3A%2F%2Fgmail.google.com%2Fgmail'; mData := mHTTP.Post('https://www.google.com/accounts/ServiceLoginBoxAuth',Post);
GetSGH; HTTPGet('http://gmail.google.com/gmail?_sgh='+mSGH);
GetJSandGMAILAT; mLoggedIn := true;
end;
end;