delphi教程

delphi http post请求提交数据

位置:首页 > delphi教程 > 高级教程,2015-10-15
delphi 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;

TAGS:delphi http post

猜你喜欢

NewHot