home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 November / Chip_2002-11_cd1.bin / zkuste / delphi / kompon / d3456 / SYNAPSE.ZIP / source / demo / http / Unit1.pas < prev   
Pascal/Delphi Source File  |  2002-07-18  |  4KB  |  148 lines

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   HTTPSend, StdCtrls, ExtCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Panel1: TPanel;
  12.     Panel2: TPanel;
  13.     Panel3: TPanel;
  14.     Panel4: TPanel;
  15.     Memo1: TMemo;
  16.     Memo2: TMemo;
  17.     Label1: TLabel;
  18.     Edit1: TEdit;
  19.     Button1: TButton;
  20.     Label2: TLabel;
  21.     Label3: TLabel;
  22.     Edit2: TEdit;
  23.     Button2: TButton;
  24.     Label4: TLabel;
  25.     Label5: TLabel;
  26.     Edit3: TEdit;
  27.     Label6: TLabel;
  28.     Edit4: TEdit;
  29.     Label7: TLabel;
  30.     Label8: TLabel;
  31.     Edit5: TEdit;
  32.     Button3: TButton;
  33.     Label9: TLabel;
  34.     Edit6: TEdit;
  35.     Edit7: TEdit;
  36.     Label10: TLabel;
  37.     Panel5: TPanel;
  38.     Label11: TLabel;
  39.     Edit8: TEdit;
  40.     Label12: TLabel;
  41.     Edit9: TEdit;
  42.     procedure Button1Click(Sender: TObject);
  43.     procedure Button2Click(Sender: TObject);
  44.     procedure Button3Click(Sender: TObject);
  45.   private
  46.     { Private declarations }
  47.   public
  48.     { Public declarations }
  49.   end;
  50.  
  51. var
  52.   Form1: TForm1;
  53.  
  54. implementation
  55.  
  56. {$R *.DFM}
  57.  
  58. function ProxyHttpPostURL(const URL, URLData: string; const Data: TStream): Boolean;
  59. var
  60.   HTTP: THTTPSend;
  61. begin
  62.   HTTP := THTTPSend.Create;
  63.   try
  64.     HTTP.ProxyHost := Form1.Edit8.Text;
  65.     HTTP.ProxyPort := Form1.Edit9.Text;
  66.     HTTP.Document.Write(Pointer(URLData)^, Length(URLData));
  67.     HTTP.MimeType := 'application/x-www-form-urlencoded';
  68.     Result := HTTP.HTTPMethod('POST', URL);
  69.     Data.CopyFrom(HTTP.Document, 0);
  70.   finally
  71.     HTTP.Free;
  72.   end;
  73. end;
  74.  
  75. function ProxyHttpPostFile(const URL, FieldName, FileName: string;
  76.   const Data: TStream; const ResultData: TStrings): Boolean;
  77. const
  78.   CRLF = #$0D + #$0A;
  79. var
  80.   HTTP: THTTPSend;
  81.   Bound, s: string;
  82. begin
  83.   Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary';
  84.   HTTP := THTTPSend.Create;
  85.   try
  86.     HTTP.ProxyHost := Form1.Edit8.Text;
  87.     HTTP.ProxyPort := Form1.Edit9.Text;
  88.     s := '--' + Bound + CRLF;
  89.     s := s + 'content-disposition: form-data; name="' + FieldName + '";';
  90.     s := s + ' filename="' + FileName +'"' + CRLF;
  91.     s := s + 'Content-Type: Application/octet-string' + CRLF + CRLF;
  92.     HTTP.Document.Write(Pointer(s)^, Length(s));
  93.     HTTP.Document.CopyFrom(Data, 0);
  94.     s := CRLF + '--' + Bound + '--' + CRLF;
  95.     HTTP.Document.Write(Pointer(s)^, Length(s));
  96.     HTTP.MimeType := 'multipart/form-data, boundary=' + Bound;
  97.     Result := HTTP.HTTPMethod('POST', URL);
  98.     ResultData.LoadFromStream(HTTP.Document);
  99.   finally
  100.     HTTP.Free;
  101.   end;
  102. end;
  103.  
  104.  
  105. procedure TForm1.Button1Click(Sender: TObject);
  106. var
  107.   HTTP: THTTPSend;
  108. begin
  109.   HTTP := THTTPSend.Create;
  110.   try
  111.     HTTP.ProxyHost := Edit8.Text;
  112.     HTTP.ProxyPort := Edit9.Text;
  113.     HTTP.HTTPMethod('GET', Edit1.text);
  114.     Memo1.Lines.Assign(HTTP.Headers);
  115.     Memo2.Lines.LoadFromStream(HTTP.Document);
  116.   finally
  117.     HTTP.Free;
  118.   end;
  119. end;
  120.  
  121. procedure TForm1.Button2Click(Sender: TObject);
  122. var
  123.   st: TMemoryStream;
  124. begin
  125.   st:=TMemoryStream.Create;
  126.   try
  127.     ProxyHTTPpostURL(Edit2.Text, Edit3.Text + '=' + Edit4.Text, st);
  128.     st.Seek(0,soFromBeginning);
  129.     Memo2.Lines.LoadFromStream(st);
  130.   finally
  131.     st.Free;
  132.   end;
  133. end;
  134.  
  135. procedure TForm1.Button3Click(Sender: TObject);
  136. var
  137.   st: TFileStream;
  138. begin
  139.   st := TFileStream.Create(Edit7.Text, fmOpenRead    or fmShareDenyWrite);
  140.   try
  141.     ProxyHTTPPostFile(Edit5.Text, Edit6.Text, ExtractFilename(Edit7.Text), st, TStringList(memo2.Lines));
  142.   finally
  143.     st.Free;
  144.   end;
  145. end;
  146.  
  147. end.
  148.