delphi7下实现http的post操作代码
3846 点击·0 回帖
![]() | ![]() | |
![]() | 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(postUrltring;Params:TStrings)tring; 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(postUrltring;Params:TStrings)tring; 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; Urltring; 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; 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; | |
![]() | ![]() |