AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Delphi-News aus aller Welt Ejemplo de uso del componente tNetHttpClient
Thema durchsuchen
Ansicht
Themen-Optionen

Ejemplo de uso del componente tNetHttpClient

Ein Thema von DP News-Robot · begonnen am 21. Aug 2022
Antwort Antwort
Benutzerbild von DP News-Robot
DP News-Robot

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

Ejemplo de uso del componente tNetHttpClient

  Alt 21. Aug 2022, 22:24









Les voy a comentar, según mi experiencia personal, por qué decidí usar este componente para acceder a páginas webs, descargar archivos, utilizarlo con módulos PHP para hacer un webservice, etc... en vez de usar el componente de Indy tIdHttp.

El principal motivo es que maneja de forma transparente el acceso a las páginas seguras, y es que antes con Idhttp tenía que utilizarlo junto con el idSSLIOHandlerSocketOpenSSL, configurarlo y además añadir los archivos libcrypto.so y libssl.so (en el caso de software para Android), lo que implica que aumenta el tamaño de la app, por si fuera poco, a veces dan problemas y tengo que perder tiempo en solucionarlos, ahora desde que descubrí que con tNetHttpClient ya no es necesario hacerlo, las apps ocupan menos tamaño al no incluir esos archivos lo cual es muy importante.

Últimamente estoy convirtiendo todos mis desarrollos para poder usar este componente que me simplifica la vida como programador.

Les recuerdo que si pasan parámetros por POST en la propiedad "ContentType" hay que poner:

'multipart/form-data' si se envian ficheros
'application/x-www-form-urlencoded' si NO se envian ficheros


Les adjunto algunos ejemplos reales que utilizo, por si les pueden ser de utilidad.

- Descargar una página web guardándola como un string.



aURL:='www.paginaweb.com';
FUNCTION DownloadWeb(aURL: STRING): STRING;
BEGIN
TRY
Result := NetHttpClient1.Get(aURL).ContentAsString;
EXCEPT
ON E: Exception DO
BEGIN
Showmessage('Error al obtener datos');
END;
END;
END;
====

- Envíar a un modulo PHP varios parámetros por POST y creando el componente NetHttpClient en tiempo de ejecución.





FUNCTION ObtenerWebPOST(progPHP: STRING): STRING;
VAR
datos: STRING;
Stream: TStringStream;
Params: tstringlist;
MiNetHttp: TNetHTTPClient;

BEGIN
Result := '';
// usar en el ContentType 'multipart/form-data' si se envian ficheros
// usar en el ContentType application/x-www-form-urlencoded si NO se envian ficheros
MiNetHttp := TNetHTTPClient.Create(NIL);
MiNetHttp.ContentType := 'application/x-www-form-urlencoded';
Stream := TStringStream.Create('');
Params := tstringlist.Create;
TRY
Params.Add('CP=08232';
Params.Add('Poblacion=Barcelona');
Stream.Position := 0;
MiNetHttp.Post('https://www.paginaweb.com/datos.php', Params, Stream);
datos := Stream.DataString;

FINALLY
Stream.Free;
Params.Free;
MiNetHttp.Free;
END;
Result := datos;

END;
=======

- Descargar desde la web un archivo utilizando un tFileStream para guardar el archivo descargado.




URL:='www.paginaweb.com/archivo.txt'; Fichero:='c:\miCarpeta\Miarchivo.txt'; PROCEDURE DownloadFile(URL, Fichero: STRING);
VAR
Stream: TFileStream;
MiNetHttp: TNetHTTPClient;
BEGIN


MiNetHttp := TNetHTTPClient.Create(NIL);
// Stream := TmemoryStream.Create; (si queremos guardar el archivo en memoria)
Stream := TFileStream.Create(Fichero, fmCreate);
TRY
MiNetHttp.Connection := 'keep-alive';
TRY
MiNetHttp.Get(URL, Stream);
EXCEPT
ON E: Exception DO
BEGIN
Showmessage('Error al descargar archivo '+e.message);
END;
END;
// Stream.SaveToFile(Tpath.Combine(Directorio, FileName)); (si se usa un tMemoryStream)

FINALLY
MiNetHttp.Free;
Stream.Free;
END;
END;


========== - Bajar archivo pasado como parámetro de una función indicando la ruta donde se almacenará y el nombre del fichero de destino.

URL:='https://www.paginaweb.com/archivo.txt';
Directorio:='c:\carpeta';
Archivo:='ArchivoDescargado.txt';


PROCEDURE BajarArchivoDeInternet(NetHttp: TNetHTTPClient; URL, Directorio, FileName: STRING);
VAR
Stream: TFileStream;
BEGIN
// Stream := TmemoryStream.Create; (si usamos un TmemoryStream)
Stream := TFileStream.Create(Tpath.Combine(Directorio, FileName), fmCreate);
TRY
MiNetHttp.Connection := 'keep-alive';
TRY
NetHttp.Get(URL, Stream);
EXCEPT
ON E: Exception DO
BEGIN
Showmessage('Error al descargar archivo '+e.message);
END;
END;
// Stream.SaveToFile(Tpath.Combine(Directorio, FileName)); (si usamos un tMemoryStream)

FINALLY
Stream.Free;
END;
END;
=====

- Enviar ficheros por POST con varios parámetros que se tratarán dentro de un módulo PHP.




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

VAR
ResponseStream: TStringStream;

// esta en la uses System.Net.Mime
Params: TMultipartFormData;
Fichero: STRING;
Path, Texto: STRING;
MiNetHttp: TNetHTTPClient;

BEGIN
MiNetHttp := TNetHTTPClient.Create(NIL);
Result := '0';
MiNetHttp.ContentType := 'multipart/form-data';
MiNetHttp.acceptencoding := Codificacion; // 'ISO-8859-1'


// usar en el ContentType 'multipart/form-data' si se envian ficheros
// usar en el ContentType application/x-www-form-urlencoded si NO se envian ficheros

ResponseStream := TStringStream.Create('');
TRY
Params := TMultipartFormData.Create;
TRY
Params.AddField('calle', NombreCalle, Codificacion);
Params.AddField('poblacion', Poblacion, Codificacion);
Path := 'c:\carpeta';
Fichero := Tpath.Combine(Path, 'foto1.jpg');
IF tfile.Exists(Fichero) THEN
BEGIN
Params.AddFile('fich1', Fichero);
END;
Fichero := Tpath.Combine(Path, 'foto2.jpg');
IF tfile.Exists(Fichero) THEN
BEGIN
Params.AddFile('fich2', Fichero);
END;
Fichero := Tpath.Combine(Path, 'index.html');
IF tfile.Exists(Fichero) THEN
BEGIN
Params.AddFile('fich3', Fichero);
END;

TRY
MiNetHttp.Post('https://www.paginaweb.com/datos.php', Params, ResponseStream);
EXCEPT
ON E: Exception DO
BEGIN
showmessage('Error al enviar el archivo: ' + E.Message');
END;
END;
Result := ResponseStream.DataString;

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

END;
=====

- Enviar por POST varios parámetros a un módulo PHP.




FUNCTION ObtenerDatos: STRING;
VAR
datos: STRING;
Stream: TStringStream;
Params: tstringlist;
MiNetHttp: TNetHTTPClient;

BEGIN
MiNetHttp := TNetHTTPClient.Create(NIL);
Result := '';

MiNetHttp.ContentType := 'application/x-www-form-urlencoded';
Stream := TStringStream.Create('');
Params := tstringlist.Create;
TRY
Params.Add('Producto1=3509');
Params.Add('Producto2=9713');
Stream.Position := 0;
MiNetHttp.Post('https://www.mipaginaweb.php/datos.php', Params, Stream);
datos := Stream.DataString;

FINALLY
Stream.Free;
Params.Free;
MiNetHttp.Free;
END;

END;

=====

Si les ha sido útil 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 14:59 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