|
Antwort |
Registriert seit: 4. Jun 2010 15.473 Beiträge |
#1
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... |
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 |