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/69843.html