Oppure

Loading
06/05/11 14:59
camaleonteplus
So come si ricava l'IP Locale usando un componente Indy adesso sto cercando di ricavare quello publico usando questo codice trovato in rete, non da errori di compilazioni ma quando clicco sul bottone mi da questo errore:
HTTP/1.1 403 Forbidden
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, StdCtrls;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    Button1: TButton;
    function GetPublicIp: String;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.GetPublicIp: String;
var B, E, I: Integer;
   Str, SStr, EStr, R: String;
   IdHTTP1: TIdHTTP;
begin
 Result := '';
 B := 0;
 E := 0;
 IdHTTP1 := TIdHTTP.Create(nil);
 try
   //Str := IdHTTP1.Get('http://www.whatismyip.com/');
   Str := IdHTTP1.Get('http://www.ip-adress.com/');
 finally
   FreeAndNil(IdHTTP1);
 end;
 if B=0 then begin
   SStr := 'Your IP  Is ';
   B := Pos(SStr, Str);
 end;
 if B=0 then begin
   SStr := 'Your IP  - ';
   B := Pos(SStr, Str);
 end;
 if B=0 then begin
   SStr := 'My IP address: ';
   B := Pos(SStr, Str);
 end;
 if B=0 then
   raise Exception.Create('Stringa non trovata! ('+SStr+')');
 if E=0 then begin
   EStr := 'WhatIsMyIP';
   //E := Pos(EStr, Str);
   E := B+16+Length(SStr);
 end;
 if E=0 then
   raise Exception.Create('Stringa non trovata! ('+EStr+')');
 Result := '';
 R := Copy(Str, B+Length(SStr), E-B-Length(SStr)-1);
 for I := 1 to Length(R) do
   if Pos(R[I], '0123456789.')>0 then
     Result := Result+R[I];
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetPublicIp);
end;

end.

é il codice sbagliato o è il sito usato? li ho utilizzati entrambi ma da sempre lo stesso errore.
aaa
06/05/11 19:47
camaleonteplus
Ho fatto cosi ma non mi comapre l'IP:
function TForm1.GetPublicIp: String;
    var
      IP: String;
      begin
      IdHttp1.Request.Host:= 'http://www.whatismyip.com';
      IP := IdHttp1.Get('http://www.whatismyip.com/automation/n09230945.asp');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetPublicIp);
end;
aaa
06/05/11 20:12
Goblin
Postato originariamente da camaleonteplus:

Ho fatto cosi ma non mi comapre l'IP:
function TForm1.GetPublicIp: String;
    var
      IP: String;
      begin
      IdHttp1.Request.Host:= 'http://www.whatismyip.com';
      IP := IdHttp1.Get('http://www.whatismyip.com/automation/n09230945.asp');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetPublicIp);
end;


sbagli candeggio .. piccola svista ? :)
stai chiamando una funzione dunque hai un ritorno, e dove l'assegni il ritorno ? ad una variabile locale dunque basta una piccola modifica, non mi metto a scrivere il tutto secondo i sacri crismi della programmazione, spero che tu invece lo faccia :)

function TForm1.GetPublicIp: String;
    var
      begin
      IdHttp1.Request.Host:= 'http://www.whatismyip.com';
      result := IdHttp1.Get('http://www.whatismyip.com/automation/n09230945.asp');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetPublicIp);
end;

forse così funziona :)
G.
Ibis redibis non morieris in bello
06/05/11 20:18
camaleonteplus
con questo codice mi da questo errore:
Function GetMyIP: String;
Var oHttp: TIdHTTP;
    sStream: TStringgrid ;
    nPos: Integer;
begin
  sStream := TStringgrid.Create;
  oHttp := TIdHTTP.Create(Nil);
  Result := 'Error';
  Screen.Cursor := crHourGlass;
  try
    Try
      oHttp.Get('http://www.ilmioip.it', sStream);  // tutta la pagina è nello stream
      nPos :=Pos('var IP_CLIENT =', sStream.DataString);
      if nPos>0 then
        Result:= copy(sStream.DataString,npos+17,14);
    Except
      ShowMessage('gestioneerrori');
    End;
  Finally
    freeandnil(sStream);
    freeandnil(oHttp);
    Screen.Cursor := crDefault;
  end;
end;

[Error] Unit1.pas(36): Not enough actual parameters
l'errore è su questa riga
sStream := TStringgrid.Create;
aaa
06/05/11 20:30
Goblin
Postato originariamente da camaleonteplus:

con questo codice mi da questo errore:
Function GetMyIP: String;
Var oHttp: TIdHTTP;
    sStream: TStringgrid ;
    nPos: Integer;
begin
  sStream := TStringgrid.Create;
  oHttp := TIdHTTP.Create(Nil);
  Result := 'Error';
  Screen.Cursor := crHourGlass;
  try
    Try
      oHttp.Get('http://www.ilmioip.it', sStream);  // tutta la pagina è nello stream
      nPos :=Pos('var IP_CLIENT =', sStream.DataString);
      if nPos>0 then
        Result:= copy(sStream.DataString,npos+17,14);
    Except
      ShowMessage('gestioneerrori');
    End;
  Finally
    freeandnil(sStream);
    freeandnil(oHttp);
    Screen.Cursor := crDefault;
  end;
end;

[Error] Unit1.pas(36): Not enough actual parameters
l'errore è su questa riga
sStream := TStringgrid.Create;


sostituire TStringgrid con TStringStream
    Function GetMyIP: String;
    Var oHttp: TIdHTTP;
        sStream: TStringStream ;
        nPos: Integer;
    begin
      sStream := TStringStream.Create;
      oHttp := TIdHTTP.Create(Nil);
      Result := 'Error';
      Screen.Cursor := crHourGlass;
      try
        Try
          oHttp.Get('http://www.ilmioip.it', sStream);  // tutta la pagina è nello stream
          nPos :=Pos('var IP_CLIENT =', sStream.DataString);
          if nPos>0 then
            Result:= copy(sStream.DataString,npos+17,14);
        Except
          ShowMessage('gestioneerrori');
        End;
      Finally
        freeandnil(sStream);
        freeandnil(oHttp);
        Screen.Cursor := crDefault;
      end;
    end;
Ibis redibis non morieris in bello
07/05/11 4:47
camaleonteplus
con questo codice:
function TForm1.GetPublicIp: String;
    var
      begin
      IdHttp1.Request.Host:= 'http://www.whatismyip.com';
      result := IdHttp1.Get('http://www.whatismyip.com/automation/n09230945.asp');
end;

mi da questo errore:
HTTP/1.1 503 Service Unavailable
aaa
07/05/11 4:52
camaleonteplus
con questo codice:
    Function GetMyIP: String;
        Var oHttp: TIdHTTP;
            sStream: TStringStream ;
            nPos: Integer;
        begin
          sStream := TStringStream.Create;
          oHttp := TIdHTTP.Create(Nil);
          Result := 'Error';
          Screen.Cursor := crHourGlass;
          try
            Try
              oHttp.Get('http://www.ilmioip.it', sStream);  // tutta la pagina è nello stream
              nPos :=Pos('var IP_CLIENT =', sStream.DataString);
              if nPos>0 then
                Result:= copy(sStream.DataString,npos+17,14);
            Except
              ShowMessage('gestioneerrori');
            End;
          Finally
            freeandnil(sStream);
            freeandnil(oHttp);
            Screen.Cursor := crDefault;
          end;
        end;

da questo errore:
[Error] Unit1.pas(35): Not enough actual parameters in questa riga:
sStream := TStringStream.Create;
aaa