灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3021回复:0

delphi7下实现http的post操作代码

楼主#
更多 发布于:2012-09-08 13:04

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(postUrltring;Params:TStrings)tring;
  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(postUrltring;Params:TStrings)tring;
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;
  Urltring;
  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;
      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;  


喜欢0 评分0
游客

返回顶部