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;  

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/69840.html