• como acceder a contenido https ( file.txt subido a drive)?

 #488983  por joselin
 07 Oct 2016, 03:24
buena necesito que mi aplicacion carge en un stream las lineas de un texto publico subido a googledrive (https),
para despues manipularlas como string
estoy buscando , mientras alguien me de una mano. gracias
 #488993  por crack81
 07 Oct 2016, 18:06
Parece que para poder obtener el contenido en el servicio de google drive es necesario usar su API ademas de tener una autentificacion, revisando en google me arroja que la forma mas facil es usando el servio de REST [ Debe registrarse para ver este enlace ] otra opcion es meterte con las indy component, pero no se que tanto te sirva ya que en delphi 7 trae indy 9 y actualmente ya estamos en la 10 que tuvo un moton de cambios, siempre tienes la opcino de actualizar los componentes en tu delphi o bajarte CODETYPHON que es un lazarus con esteroides que entre sus curiosidades ya viene con las indy 10.
 #488995  por joselin
 07 Oct 2016, 20:08
gracias crack si efectivamente no hay muchas opciones para el 7
probe con synapse pero tambien no logro obtener el contenido
voy a intentar hacerlo en http con la pagina de pastebin
aver que sale.
me doy cuenta que no tengo conocimientos de interaccion con programacion web aaaaaaaaaa¡
a darle caña
gracias de nuevo.
 #488999  por crack81
 08 Oct 2016, 03:41
El problema es que las versiones antiguas de delphi no tienes las características para tratar con estos servicios, claro si usas una versión mas reciente como la que tengo yo(Delphi berlin 10) pues las cosas cambian. Otra opcion es que te animes a usar otro lenguaje de programacion como es el caso de python, hacer eso que tu pides en python es relativamente facil.
 #489003  por joselin
 08 Oct 2016, 07:21
me queres hacer migrar
bueno me quedo con este codigo para descargar el contenido de pastebin
(todo extraido de internet, por los creditos digo)
me encanto la funcion parse
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Wininet;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
  function Pars(T_, ForS, _T: string): string;
var
  a, b: integer;
begin
  Result := '';
  if (T_ = '') or (ForS = '') or (_T = '') then
    Exit;
  a := Pos(T_, ForS);
  if a = 0 then
    Exit
  else
    a := a + Length(T_);
  ForS := Copy(ForS, a, Length(ForS) - a + 1);
  b := Pos(_T, ForS);
  if b > 0 then
    Result := Copy(ForS, 1, b - 1);
end;


function MemoryStreamToString(M: TMemoryStream): string;
begin
  SetString(Result, PChar(M.Memory), M.Size div SizeOf(Char));
end;
  // Con esta funcion hacemos Get y nos devuleve el resultado en un stream
function Get(Url: string; Stream: TStream): Boolean;
var
  hNet: HINTERNET;
  hUrl: HINTERNET;
  Buffer: array[0..10240] of Char;
  BytesRead: Cardinal;
begin
  Result:= FALSE;
  hNet:= InternetOpen('Agente', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if (hNet <> nil) then
  begin
    hUrl:= InternetOpenUrl(hNet, PChar(Url), nil, 0,
      INTERNET_FLAG_RELOAD, 0);
    if (hUrl <> nil) then
    begin
      while (InternetReadFile(hUrl, @Buffer, sizeof(Buffer), BytesRead)) do
      begin
        if (BytesRead = 0) then
        begin
          Result:= TRUE;
          break;
        end;
        Stream.Write(Buffer,BytesRead);
      end;
      InternetCloseHandle(hUrl);
    end;
    InternetCloseHandle(hNet);
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Stream: TMemoryStream;
str:string;
begin

  Stream:= TMemoryStream.Create;
  try
  Get(edit1.text,Stream);
  memo1.text := (pars('catchTab(this,event)">',PChar(Stream.Memory),'</textarea>'));
  finally
 Stream.Free;
  end;

end;

end.
 #489007  por joselin
 08 Oct 2016, 19:57
la idea es sacar la ip publica subida encriptada(todabia me falta esa parte)
desde pastebin ,
desencriptarla y conectar con el cliente
hay problemas raros , por ejemplos hay momentos en que el stream no me carga nada desde la pagina
y al rato funciona , puede ser un tema de liberar memoria o alguna proteccion de pastebin
y el otro problema es que al encriptar la ip
si en el resultado tengo simbolos no se como decodificar esos caracteres en http
este seria el primer ejemplo en el que estoy tyrabajando
var
Stream: TMemoryStream;
str,ip :string;
i,e :integer;
begin

  Stream:= TMemoryStream.Create;
  try
  Get(edit1.text,Stream);
      //se puede copiar la ip  con el pars
 str:= (pars('catchTab(this,event)">',Pchar(Stream.Memory),'</textarea>'));
 i:=  pos('#',str )+1;
 e:=pos('*',str )-(pos('#',str )+1) ;
  ip:=copy (str,i,e) ;
  showmessage(ip);

  //ip:= copy (str, pos('#',str )+1,pos('*',str )-(pos('#',str )+1));
     //desencriptar la ip en esta parte

  finally
 Stream.Free;
  end;
  ClientSocket1.Address := IP;
  ClientSocket1.Host := IP;
  clientsocket1.Port := strtoint (edit2.Text);
a la ip le pongo separadores para copiar# 192.168.1.6*
 #489010  por crack81
 09 Oct 2016, 01:22
Hola pues muestro mi versión en vez de usar la API de windows hago uso de los indy components el formato que uso es este:


Imagen:
//Descarga el contenido de una URL usando las indy components
function TForm1.getDataFromUrl(const url: string): string;
var
http:TIdHTTP;
begin
  http:=TIdHTTP.Create(nil); //creamos el objeto
  try
   Result:=http.Get(url); //retornamos el contenido de la URL
  finally
   FreeAndNil(http); //Liberamos la memoria
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const DELIMITADOR='#Delimitador#';
var
  html:string;
  P1,P2,nCaracteres,LEN:Integer;
begin
  if Edit1.Text=EmptyStr then Exit;  //Si el edit esta vacio salimos
  html:=getDataFromUrl(Edit1.Text);//Leemos la pagina web
  P1:=Pos(DELIMITADOR,html); //Posicion del primer delimitador

  if P1>0 then
  begin
    LEN:=Length(DELIMITADOR); //Tamano del delimitador
    P2:=Pos(DELIMITADOR,html,P1+LEN);//Posicion del segundo delimitador
    nCaracteres:=P2-P1-LEN;//Cantidad de caracters a leer
    Memo1.Text:=Copy(html,P1+LEN,nCaracteres); //IP ADDRESS Leida
  end
  else
    ShowMessage('No se encuentran los datos');
end;
El programa lo hice en Delphi berlin 10 pero estoy casi 100% seguro que funciona en Delphi 7, les dejo aun asi el proyecto con el compilado por si quieren probarlo
Link [ Debe registrarse para ver este enlace ]
Me devuelve si quiero hasta letras en koreano
 #489011  por Pink
 09 Oct 2016, 02:17
Todavía no entiendo cual es el problema. porque no solo coges la IP en texto como te dije en el código que puse arriba.
Y si es usando pastebin lo haces con la url en este formato [ Debe registrarse para ver este enlace ]

Si vas a guardar varios valores ademas de la IP. Puedes mar bien usar algún otro formato como XML, Json o también puedes crear to propio estructura de datos.


Saludos
 #489012  por joselin
 09 Oct 2016, 02:56
tenes razon pink no es complicado dejenme ver como lo desenvuelvo
tambien quiero usar la encriptacion aes 256 de seoane para proteger la ip publica

saludos
 #489014  por crack81
 09 Oct 2016, 04:06
Joselin en esto es lo que estas pensando?


Este es usando el cifrado de seoane, cifrado en el pastebin y al descargarse se descifra en automatico.
Si no es asi puedes darnos mas pistas. Saludos.....
 #489018  por joselin
 09 Oct 2016, 15:27
escribi una repsuesta larga cuando doy a publicar me agarro
la proteccion cloud y se borro todo la puta madre
es para una conexion inversa el cliente genera la ip encriptada
la subimos a pastebin el server conecta a esa url desencripta la ip e intenta conexion
estoy probando y funka
voy a seguir testeando y veo si realmente funciona