AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Delphi-News aus aller Welt Ejemplos de uso del componente tidHTTP de la suite Indy
Thema durchsuchen
Ansicht
Themen-Optionen

Ejemplos de uso del componente tidHTTP de la suite Indy

Ein Thema von DP News-Robot · begonnen am 29. Jul 2022
Antwort Antwort
Benutzerbild von DP News-Robot
DP News-Robot

Registriert seit: 4. Jun 2010
14.985 Beiträge
 
#1

Ejemplos de uso del componente tidHTTP de la suite Indy

  Alt 29. Jul 2022, 15:10




A continuación, les muestro ejemplos sobre cómo utilizar el componente tidHTTP de la suite de componentes Indy. que para los que no la conozcan es un conjunto de componentes open source que soportan sockets TCP/UDP/RAW y más de 100 protocolos de comunicaciones (smtp, pop3, imap, http, ftp, etc...)


En caso de que necesiten información sobre su uso y ejemplos detallados lo tienen aquí.


-Tips a tener en cuenta si se quiere acceder a una página segura:


En este link tienen cómo configurar el componente idHTTP y el idSSLIOHandlerSocketOpenSSL

Recordar que en este caso en el evento OnCreate hay que indicarle la rutas de las librerías SSL tecleando:
IdOpenSSLSetLibPath(tpath.GetDocumentsPath); Indicar en el USES la unit
IdSSLOpenSSLHeaders

Si se han cargado las librerías correctamente pueden obtener su versión de esta forma:


label1.Text:=IdSSLOpenSSL.OpenSSLVersion

y para obtener los errores en tiempo de ejecución tienen que indicar lo siguiente:


IdSSLOpenSSLHeaders.WhichFailedToLoad();




EJEMPLOS DE PROGRAMACIÓN:


-Bajar un archivo utilizando tFileStream



PROCEDURE DownloadFile(URL, Directorio, FileName: STRING);
VAR
Stream: TFileStream;

BEGIN

IF IdHTTP1.Connected THEN
IdHTTP1.Disconnect;
IdHTTP1.HandleRedirects := true;
IdHTTP1.Request.Connection := 'keep-alive';
IdHTTP1.Request.ContentType := '';


Stream := TFileStream.Create(Tpath.Combine(Directorio, FileName), fmCreate);
TRY
Stream.Position := 0;
IdHTTP1.Get(URL, Stream);
FINALLY
Stream.Free;
END;
END;

===

-Bajar el archivo "fichero.txt" utilizando tMemoryStream








PROCEDURE DownloadFile(URL, Directorio, FileName: STRING);
VAR
Stream: TMemoryStream;

BEGIN

IF IdHTTP1.Connected THEN
IdHTTP1.Disconnect;
IdHTTP1.HandleRedirects := true;
IdHTTP1.Request.Connection := 'keep-alive';
IdHTTP1.Request.ContentType := '';

Stream := TmemoryStream.Create;
TRY
Stream.Position := 0;
IdHTTP1.Get('http://www.miweb.com/fichero.txt', Stream);
Stream.SaveToFile(Tpath.Combine(Directorio, FileName));

FINALLY
Stream.Free;
END;
END;

===

-Obtener una imagen de una URL y guardarla en un tImage






PROCEDURE LoadFromURL(URL: STRING; VAR image1: tImage);
VAR
Stream: TMemoryStream;
IdH: TIdHTTP;

BEGIN

Stream := TMemoryStream.Create;
TRY
IdH := TIdHTTP.Create(NIL);
IdH.AllowCookies := true;

TRY
IdH.Get(Trim(URL), Stream);
EXCEPT
// Error al descargar la imagen
// .. Volcarlo al log
END;
Stream.Position := 0;
image1.bitmap.loadfromstream(Stream);

FINALLY
IdH.Free;
Stream.Free;
END;

END;
======

- Enviar un fichero y varios parámetros a una web con POST




FUNCTION EnviarFicheroAUnaWeb: STRING;
CONST
Codificacion = 'ISO-8859-1'; // 'ISO-8859-1';

VAR
// esta en la unit system.classes
ResponseStream: TStringStream;
// esta en la unit IdMultipartFormData
Params: TIdMultipartFormDataStream;
fichero: STRING;
Path, Texto: STRING;

BEGIN
Result := '0';

IdHTTP1.HandleRedirects := true;
IdHTTP1.Request.BasicAuthentication := False;
// usar 'multipart/form-data' si se envian ficheros
// usar application/x-www-form-urlencoded si NO se envian ficheros
IdHTTP1.Request.ContentType := 'multipart/form-data';
IdHTTP1.Request.UserAgent := ConstanteUserAgent;

ResponseStream := TStringStream.Create('');
TRY
Params := TIdMultipartFormDataStream.Create;
TRY
Params.AddFormField('usu', 'nombre1', Codificacion);
Params.AddFormField('ruta', '123', Codificacion);
Path := DirectorioLocal;
fichero := Tpath.Combine(Path, 'index.html');
IF tfile.Exists(fichero) THEN
BEGIN
Params.AddFile('fich1', fichero);
END;

// ======================================
// añadiendo 'utf-8', 'application/octet-stream').ContentTransfer := '8bit';
// evita que el valor de los campos se trunque a 75 caracteres
// evitara muchos problemas
// Params.AddFormField('metadata', 'valor', 'utf-8', 'application/octet-stream').ContentTransfer := '8bit';
// ======================================

TRY
ResponseStream.Position:=0;
IdHTTP1.Post('https://www.miweb.com/subir.php', Params, ResponseStream);
// IdSSLOpenSSLHeaders.WhichFailedToLoad();
EXCEPT
ON E: Exception DO
BEGIN
IF ansipos('not load SSL', E.Message) > 0 THEN
BEGIN
SHOWMESSAGE('No se puede cargar SSL');
END
ELSE
BEGIN
showmessage(Error al enviar el archivo: ' + E.Message);
END;
END;
END;
Result := ResponseStream.DataString;
FINALLY
Params.Free;
END;
FINALLY

ResponseStream.Free;
END;
END;


========

-Enviar datos por POST a una web (Los datos los recoge un programa hecho en PHP)






FUNCTION EnviarNombreUsuario(usu: STRING): STRING;
CONST
Codificacion = 'UTF8'; // 'ISO-8859-1';

VAR
// uses IdHTTP, IdMultipartFormData;
ResponseStream: TStringStream;
Params: TIdMultipartFormDataStream;
datos: STRING;
BEGIN
Result := '0';
IdHTTP1.HandleRedirects := true;
IdHTTP1.Request.BasicAuthentication := False;

// application/x-www-form-urlencoded //si no se agregan archivos
// multipart/form-data //si se agregan archivos
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded ';
IdHTTP1.Request.UserAgent := ConstanteUserAgent;
IdHTTP1.Request.ContentEncoding := Codificacion;
// 'ISO-8859-1' ;

ResponseStream := TStringStream.Create('');
TRY
Params := TIdMultipartFormDataStream.Create;
TRY
Params.AddFormField('Usu', usu, 'utf-8', 'application/octet-stream').ContentTransfer := '8bit';
TRY
ResponseStream.Position := 0;
IdHTTP1.Post('https://www.miweb.com/subir.php', Params, ResponseStream);

EXCEPT
ON E: Exception DO
BEGIN
//excepcion silenciosa
Abort;
END;
END;
Result := ResponseStream.DataString;

FINALLY
Params.Free;

END;
FINALLY

ResponseStream.Free;
END;
END;

=======

- Obtener nuestra IP pública




function IP_Publica: string;

function EsNumerico( S: string ): Boolean;
begin
Result := false;
if ( Length( S ) > 0 ) then
case S[1] of
'0'..'9': Result := True;
end;
end;
var
HTMLBody: string;
i: Integer;
IdHTTP: TIdHTTP;
begin
Result := '';

// ¿Estamos conectados a Internet?
if WinInet.InternetGetConnectedState( nil, 0 ) then
begin
IdHTTP := TIdHTTP.Create( Application );

try
HTMLBody := IdHTTP.Get( 'http://checkip.dyndns.org/' );

for i := 0 to Length( HTMLBody ) - 1 do
begin
if EsNumerico( HTMLBody[i] ) or ( HTMLBody[i] = '.' ) then
Result := Result + HTMLBody[i];
end;

finally
IdHTTP.Free;
end;
end;
end;


==========

-Enviar datos a una web con POST siendo los Parámetros de tipo StringList

FUNCTION EnviarNombreUsuario(usu: STRING): STRING;
CONST
Codificacion = 'UTF8'; // 'ISO-8859-1';

VAR
// uses IdHTTP, IdMultipartFormData;
ResponseStream: TStringStream;
Params: tStringList;
BEGIN
Result := '0';
IdHTTP1.HandleRedirects := true;
IdHTTP1.Request.BasicAuthentication := False;

// application/x-www-form-urlencoded //si no se agregan archivos
// multipart/form-data //si se agregan archivos
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded ';
IdHTTP1.Request.UserAgent := ConstanteUserAgent;
IdHTTP1.Request.ContentEncoding := Codificacion;
// 'ISO-8859-1' ;

ResponseStream := TStringStream.Create('');
TRY
Params := tStringList.Create;
TRY
Params.Add('Usu=123');
TRY
ResponseStream.Position := 0;
IdHTTP1.Post('https://www.miweb.com/subir.php', Params, ResponseStream);

EXCEPT
ON E: Exception DO
BEGIN
//excepcion silenciosa
Abort;
END;
END;
Result := ResponseStream.DataString;

FINALLY
Params.Free;
END;
FINALLY
ResponseStream.Free;
END;
END;






Aquí tienen más ejemplos de uso:

- Crear tu propio servidor

- Cómo crear un proxy


- Página de docwiki del componente




Si les ha gustado este post y quieren recibir un email cada vez que publique uno nuevo
pueden suscríbirse desde aquí













Suscribirse :


Weiterlesen...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz