|
Antwort |
Registriert seit: 4. Jun 2010 15.392 Beiträge |
#1
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... |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |