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;  
 

你可能感兴趣的:(xml,windows,XHTML,OS,firefox)