delphi7下实现http的post操作
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,IdHTTP, StdCtrls, Buttons, OverbyteIcsWndControl, OverbyteIcsHttpProt;typeTForm1 = class(TForm) btn1: TButton; procedure btn1Click(Sender: TObject);private { Private declarations }public { Public declarations } functionhttpPost(postUrl:string;Params:TStrings):string;end;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);varurl : string;Params: TStrings;beginParams := TStringList.Create;Params.Add('username=kenter1983');Params.Add('password=111111');url := 'http://www.cnlive.com/index/?action=login';ShowMessage(httpPost(url,Params));end;functionTForm1.httpPost(postUrl:string;Params:TStrings):string;varidhtp1: TIdHTTP;beginidhtp1:= TidHTTp.create(self);idhtp1.AllowCookies:=True;idhtp1.HTTPOptions:=;idhtp1.ProtocolVersion:=pv1_1;idhtp1.Request.ContentType:='application/x-www-form-urlencoded';idhtp1.Request.CacheControl:='no-cache'; idhtp1.Request.UserAgent:='User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1';idhtp1.Request.Accept:='Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';idhtp1.Request.AcceptEncoding:='Accept-Encoding=gzip,deflate';idhtp1.Request.AcceptCharSet:='Accept-Charset=gb2312,utf-8;q=0.7,*;q=0.7';idhtp1.Request.Connection:='Connection=keep-alive';try result := idhtp1.Post(postUrl,Params);except Result := 'error';end;end;end.文件流
ConstCRLF = #13#10;vars,s1,filename:String;response:TStringStream;source,source1:TMemoryStream;Url:string;i,cnt:integer;beginidhttp.Request.ContentType:='multipart/form-data';Response := TStringStream.Create('');url:='Http://'+host+dir;cnt:=files.Count;if (not dead) then begin for i:=0 to cnt-1 do begin filename:=files; if fileexists(filename) then begin try S := '-----------------------------7cf1d6c47c' + CRLF + 'Content-Disposition: form-data; name="file1"; filename="'+filename+'"'+CRLF + 'Content-Type: application/octet-stream' + CRLF + CRLF; //上传文件内容 s1:='file one content. Contant-Type can be application/octet-stream or if'+ 'you want you can ask your OS fot the exact type.' + CRLF + '-----------------------------7cf1d6c47c' + CRLF + //分界符,用于分隔表单(Form)中的各个域 'Content-Disposition: form-data; name="text1"' + CRLF + CRLF + 'hello2' + CRLF + '-----------------------------7cf1d6c47c--'; //提交的下一个表单内容域的内容 s1:=CRLF +'-----------------------------7cf1d6c47c' + CRLF + 'Content-Disposition: form-data; name="text1"' + CRLF + CRLF + 'hello2' + CRLF + '-----------------------------7cf1d6c47c--'; Source := TMemoryStream.Create; Source1 := TMemoryStream.Create; Source1.LoadFromFile(filename); Response:=TStringStream.Create('') ; Response.CopyFrom(source1,source1.Size); s:=s+Response.DataString;//因为只能传字符串 Source.Position :=0; Source.Write(s,length(s)); Source.Position :=source.Size ; Source.Write(s1,length(s1)); Response.Position :=0; try idHTTP.Post(url, Source, Response); finally if not uploadsuccess(Response.DataString) then begin dead:=true; self.idhttp.Disconnect; end; Source.Free; Response.Free; end;
页:
[1]