Flash info

Benjamin Bougré, développeur multimédia, électricien, électronicien.
Mon C.V.
Tél. 06 88 11 15 11
Recherche employeur proche Tours, permis B.

 

Options du site

Pub : M/C Zone : M/C
Thème bleu
Thème vert
Thème orange
Thème violet
Thème noir
Thème blanc

Articles similaires

Qui est en ligne

Il y a actuellement 62 invités en ligne
Accueil arrow Les outils informatiques arrow Hors ligne arrow HEAD, pour savoir qui répond quoi
HEAD, pour savoir qui répond quoi Version imprimable

HEAD

Une petite application toute simple qui envoie une requête HEAD avec un Socket.. et vous informe de la réponse.

Autrement dit cela permet de savoir vers quel type (MIME) de fichier un lien vous mène.

Donnez simplement l'URL dans la ligne de commande pour HEAD.exe , par exemple : head.exe http://www.monsite.com/ , ou bien entrez cette URL dans la zone de saisie et pressez la touche "Entrer".

Les sources sont téléchargeables ici !

Le fichier principal des sources (en Delphi) :

Code: ( delphi )
unit Unit1;
 
interface
 
uses
  Windows, SysUtils, Classes, Controls, Forms, StdCtrls, ScktComp, ExtCtrls;
 
type
  TF = class(TForm)
    M: TMemo;
    P: TPanel;
    B1: TButton;
    B2: TButton;
    E: TEdit;
    CB: TComboBox;
    EP: TEdit;
    procedure B2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure B1Click(Sender: TObject);
    procedure E1KeyPress(Sender: TObject; var Key: Char);
  private
    CS: TClientSocket;
    function  Break_URL(Value: String):  Boolean;
    procedure CSConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure CSRead   (Sender: TObject; Socket: TCustomWinSocket);
    procedure CSErr    (O:      TObject; S:      TCustomWinSocket;
                        EE:TErrorEvent;  var EC:Integer);
  public
  end;
 
var
  F: TF;
 
implementation
 
{$R *.dfm}
 
function TF.Break_URL(Value: String): Boolean;
var I: Integer;
begin
 Result := False;
 I := Pos('//',Value);
 if Copy(Value,1,I-1) = 'http:'  then I :=  80 else
 if Copy(Value,1,I-1) = 'https:' then I := 443 else
 if Copy(Value,1,I-1) = 'ftp:'   then I :=  21 else I := 0;
 if I <> 0 then
 begin
  Result  := True;
  EP.Text := IntToStr(I);
  CB.Text := Trim(Copy(Value,Pos('//',Value)+2,1000));
  I := Pos('/',CB.Text);
  if I > 0 then
  begin
   E.Text  := Copy(CB.Text,I,1000);
   CB.Text := Copy(CB.Text,1,I-1);
  end;
 end;
 
end;
 
procedure TF.CSConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
 if CS.Active then
 begin
  Caption := 'Connected';
  CS.Socket.SendText('HEAD '+E.Text+' HTTP/1.1'#13#10+
                     'Host: '+CS.Host+#13#10#13#10);
 end else
 begin
  Caption := 'HEAD /';
  M.Lines.Add('----------------------------------------------');
 end;
end;
 
procedure TF.CSRead(Sender: TObject; Socket: TCustomWinSocket);
var S: String;
begin
 S := Trim(CS.Socket.ReceiveText);
 if Length(S) > 0 then M.Lines.Add(S);
end;
 
procedure TF.CSErr(O:TObject;S:TCustomWinSocket;EE:TErrorEvent;var EC:Integer);
var ErrMsg: String;
begin
 ErrMsg := '/!\ ERROR: ';
 case EE of
  eeGeneral   : ErrMsg := ErrMsg + 'General';
  eeSend      : ErrMsg := ErrMsg + 'Send';
  eeReceive   : ErrMsg := ErrMsg + 'Receive';
  eeConnect   : ErrMsg := ErrMsg + 'Connect';
  eeDisconnect: ErrMsg := ErrMsg + 'Disconnect';
  eeAccept    : ErrMsg := ErrMsg + 'Accept';
  eeLookup    : ErrMsg := ErrMsg + 'Lookup';
  else          ErrMsg := ErrMsg + '???';
 end;
 M.Lines.Add(ErrMsg);
 EC := 0;
end;
 
procedure TF.B2Click(Sender: TObject);
begin
 CS.Close;
 M.Clear;
 Caption := 'HEAD /';
end;
 
procedure TF.FormCreate(Sender: TObject);
begin
// DoubleBuffered  := True;
 EP.Hint := 'The port number:'#13'21 = FTP'#13'80 = HTTP'#13'443 = HTTPS';
 CS := TClientSocket.Create(NIL);
 CS.OnConnect    := CSConnect;
 CS.OnRead       := CSRead;
 CS.OnDisconnect := CSConnect;
 CS.OnError      := CSErr;
 if (ParamCount > 0) and Break_URL(ParamStr(1)) then B1.Click;
end;
 
procedure TF.FormDestroy(Sender: TObject);
begin
 CS.Free;
end;
 
procedure TF.B1Click(Sender: TObject);
begin
 if CS.Active then Sleep(1000); Application.ProcessMessages;
 if CS.Active then CS.Close;
 CB.Text := Trim(CB.Text);
 E.Text  := Trim(E.Text);
 Break_URL( CB.Text);
 CS.Host := CB.Text;
 CS.Port := StrToIntDef(EP.Text,80);
 EP.Text := IntToStr(CS.Port);
 CS.Open;
 M.Lines.Add('');
 M.Lines.Add('---[ '+CB.Text+' ('+EP.Text+') '+E.Text+' ]'+
             '---[ '+TimeToStr(Time)+' ]---');
 if CB.Items.IndexOf(CB.Text) = -1 then CB.Items.Add(CB.Text);
end;
 
procedure TF.E1KeyPress(Sender: TObject; var Key: Char);
begin
 if Key = #13 then B1.Click else
 if Key = #27 then B2.Click;
end;
 
end.

 
< Précédent   Suivant >