Delphi7下实现HTTP的Post操作
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, StdCtrls, Buttons, OverbyteIcsWndControl, OverbyteIcsHttpProt;
type TForm1 = class(TForm) btn1: TButton; procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } function httpPost(postUrl:string;Params:TStrings):string; end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject); var url : string; Params: TStrings; begin Params := TStringList.Create; Params.Add('username=kenter1983'); Params.Add('password=111111'); url := 'http://www.cnlive.com/index/?action=login'; ShowMessage(httpPost(url,Params));
end;
function TForm1.httpPost(postUrl:string;Params:TStrings):string; var idhtp1: TIdHTTP; begin idhtp1:= TidHTTp.create(self); idhtp1.AllowCookies:=True; idhtp1.HTTPOptions:=[hoForceEncodeParams]; 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.
文件流
Const CRLF = #13#10; var s,s1,filename:String; response:TStringStream; source,source1:TMemoryStream; Url:string; i,cnt:integer; begin idhttp.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[i]; 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[1],length(s)); Source.Position :=source.Size ; Source.Write(s1[1],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;
|
请发表评论