当前位置:编程学习 > Delphi >>

delphi7下实现http的post操作

unit Unit1;

inte易做图ce

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; 


 

 

补充:软件开发 , Delphi ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,