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 ,