Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Estoy de acuerdo contigo Román. Más ahora que sé que puede funcionar mejor incluso. Empero, lo dicho dicho, una cosa no quita la otra. En realidad creo que estamos de acuerdo todos, incluído el propio Domingo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #2  
Antiguo 01-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Vaya me levanto para cenar algo y como se animo la conversación. Vamos ir por partes como dijo Jack.
Cita:
Empezado por Roman
¿Que no puedes usar las Indy en TurboExplorer? ¿Y quién dice que no?
Yo no dije nunca lo contrario, de hecho al poquito tiempo de salir los turbo comente por aqui que se podían usar las Indy por código.
Cita:
Empezado por Roman
No puedes incrustarlas en un formulario y asignar sus propiedades con el Inspector de objetos, pero sí puedes instanciarlas manualmente, y que yo sepa eso es legal. Siendo componentes no visuales, no es mucha la carga de hacerlo a pie
No, no resulta mucho trabajo hacerlo a mano, pero tampoco mucho menos que hacerlo con Wininet.
Cita:
Empezado por Roman
Por otra parte, wininet es una api de "alto nivel" para facilitar el uso de los protocolos tcp, pero esto mismo hace que no sea tan eficiente como las componentes indy que usan dichos protocolos a "bajo nivel"
Hombre, cual de los 2 es mas eficiente seria discutible. Si bien es verdad que el código de las Indy es impecable, también es verdad que se a convertido en un gigante, con múltiples propiedades, eventos, etc ... solo hay que ver el par de cientos de Kb que añade al ejecutable para ver su envergadura. Además no hay razón para suponer que el código de microsoft desde que se hace una petición http hasta el Winsock, de muchas mas vueltas que Indy desde que hacemos una petición http hasta el winsock (Indy también hace uso del winsock, es todo lo abajo que llega ). Tendríamos que hacer pruebas, pero apuesto a que wininet podría obtener tiempos iguales o mejores que Indy.

Y por ultimo algo mas subjetivo, me gusta mas el Wininet que le vamos a hacer. Pero si bien es verdad me he fijado que en este foro suele gustar mucho mas las Indy, así que supongo que serán mejores, pero yo todavía no he visto que ofrezca grandes ventajas, al menos en aplicaciones cliente, no así si queremos hacer, por ejemplo, un servidor. Pero eso ya es otra historia ...
Responder Con Cita
  #3  
Antiguo 01-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Las ventajas que ofrecen las Indy deben ser, sin duda, la orientación a objetos, esto es, que son un conjunto de componentes y clases que te permiten trabajar manipulando propiedades, invocando métodos, respondiendo a eventos, etc.

Ahora bien, mirando el código que has presentado Seoane dan ganas en encapsularlo y presentarlo en una clase. En todo caso creo que puede resultar muy útil.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 02-11-2006
tefots tefots is offline
Miembro
 
Registrado: feb 2005
Posts: 108
Poder: 22
tefots Va por buen camino
volviendo al tema

aqui pongo un ejemplo de como hacer un post usando las indy.
creo que es mas sencillo que usando las wininet.

el get seria parecido.


Código Delphi [-]
procedure TForm1.SendPostData;
Var
  aStream: TMemoryStream;
  Params: TStringStream;
begin
  aStream := TMemoryStream.create;
  Params := TStringStream.create('');

  try
    with IdHTTP1 do
    begin
      Params.WriteString(URLEncode('teste=' + 'yes' + '&'));
      Params.WriteString(URLEncode('name=' + 'ivan' + '&'));
      Params.WriteString(URLEncode('number=' + '102'));
      Request.ContentType := 'application/x-www-form-urlencoded';
      try
        Post('http://localhost/teste.asp', Params, aStream);
      except
        on E: Exception do
          showmessage('Error encountered during POST: ' + E.Message);
      end;
    end;
  aStream.WriteBuffer(#0' ', 1);
  aStream.Position := 0;
  Memo1.Lines.LoadFromStream(aStream);
  except
  end;
end;
Responder Con Cita
  #5  
Antiguo 02-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Por favor Roman llámame Domingo que hay confianza . Por otro lado, Dec en su truco 346 utiliza un TIdMultiPartFormDataStream, en concreto el método AddFormField para pasar los parámetros, ignoro cual es la mejor forma de hacerlo. A mi también se me hace mas cómodo usar un TStringList, en eso parece que estamos de acuerdo.

Por si tienes curiosidad wininet creo también maneja el código código 302, al menos maneja el 301 . En cuanto a las cookies, ya dije antes que si las maneja, incluso utiliza las cookies guardadas previamente, con el típico "Recordar contraseña" que se encuentra en algunas paginas web.

Pero dejemos este tema a un lado, lo importante es que tanto por un método como por el otro obtenemos un resultado en un Stream. Centremonos entonces en ese punto, yo también estoy esperando haber que solución se puede utilizar para examinar el contenido de la respuesta.
Responder Con Cita
  #6  
Antiguo 04-11-2006
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Hola de nuevo!

Muchas de estas cosas son nuevas para mí. Mi conocimiento actual sobre HTTP se reduce a unas pequeñas prácticas realizadas con PHP en el verano de 2005.

Con un día de retraso en mi agenda, empezaré a probar el componente TIdHttp, muy bien sugerido e ilustrado por David.

Domingo: los enlaces y ejemplos que me indicas me resultaron muy interesantes también. Ya había buscado en los foros, aunque no lo suficiente por lo que veo.

Antonio: habré de molestarte con algunos consejillos cuando me tope con eso de las galletas de sesión (¡mmm, galletas! , de pronto abrírseme el apetito, me acercaré unas con chispas de chocolate que tengo en la cocina...).

Bien, manos a la obra...

Un abrazo HTTP.

Al González.
Responder Con Cita
  #7  
Antiguo 04-11-2006
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile Monólogo de acercamiento inicial

¡Hola a todos!

Ya le eché un vistazo superficial a las propiedades y eventos del componente TIdHTTP. Aquí el curso de mi pensamiento durante dicha labor:

--------------------------------------------------------------------------
Estudio del componente TIdHTTP.
Monólogo de acercamiento inicial.
Por Al González.


¡Vaya! Así que estos son los famosos Indy. Pero qué iconos tan simplones tienen, hasta un gatito aparece ahí...ah no, el diccionario dice que se trata de un «roedor semejante a la ardilla».

Bien, ya agregué un TIdHTTP a mi forma. La primera propiedad que tiene es AllowCookies, y aparece marcada con True negrita, como si su valor predeterminado fuese False. Lo más probable es que no le hayan puesto la cláusula Default a su declaración...Efectivamente, Doychin Bondzhev olvidó hacerlo, o no quiso. Prosigamos...

Curiosa nota en los comentarios de la unidad IdHTTP.pas:

Initially only GET and POST will be supported. As time goes on more will be added…

Sería interesante saber qué otros métodos de envío de datos pueden o podrían implementarse en HTTP.

AuthRetries. Ésta se me hace que la voy a necesitar para el ingreso de usuarios.

CookieManager. Aquí está la propiedad que decía Antonio. Por el momento voy a probar sin control de galletas (porque de hecho ya me las terminé ).

HandleRedirects. Esto me suena a cuando quiero entrar a una página y el navegador me lleva a otra, a veces de forma temporal para decirme que he ganado 50 millones de dólares y churradas similares.

HTTPOptions. Amo las propiedades Options, tienen un no sé qué que siempre te saca de apuros. hoForceEncodeParams está en True, como debe ser; ya había olvidado que en las URLs deben codificarse los caracteres no ingleses para que cualquier servidor Web lo interprete correctamente (ojalá Unicode no pase a la historia como el Esperanto de las comunicaciones, urge su uso difundido).

MaxLineAction, MaxLineLength con valor default de 16384. No dudo que todavía haya programadores que se jactan de su ingenio escribiendo doscientas sentencias en una sola línea.

Port 80. Según he escuchado, el puerto que utilizan los navegadores. Bien.

ProtocolVersion con valor de pv1_1. Ahora que recuerdo, cuando estuve trabajando con un mecanismo de inserción automática de texto HTML en Word, la cabecera del texto llevaba algo de versión al principio. Y si mal no recuerdo, para compatibilidad, la versión usada era la 0.9 (o algo así). Me pregunto si tiene que ver una cosa con la otra y cómo influye esto de la versión en TIdHTTP.

Vaya, la ayuda dice «specifies the HTTP version used for Get, Head, and Post methods for the HTTP client». Entonces sí existen otros métodos (por lo menos uno) además de Get y Post, ¿cómo será eso del método Head?

ProxyParams. ¡Oh-oh! Creo que ha llegado la hora de investigar qué es exactamente un proxy (durante años sólo he tenido la vaga idea de que es una especie de filtro repartidor de Internet, y que por lo regular limita la libertad de los usuarios para no dejarlos trabajar a gusto). A ver Wikipedia, dime quién es el más bonito, digo, dime qué es un proxy. Bien, por lo que veo no estaba tan lejos, es un software (por lo general) que administra, controla y facilita automáticamente los accesos a Internet en una red.

Si el cliente tiene un proxy, supongo tendré que emplear las sub propiedades ProxyUsername y ProxyPassword. Algo a tener en cuenta.

ReadTimeout. Ha de ser el tiempo de espera para recibir una respuesta del servidor Web, aunque la ayuda dice que es «peer connection». Supongo que en este caso el término conexión se refiere a cada orden o submit, enviado al servidor Web, no a la sesión en sí.

Request. «Specifies the header values to send to the HTTP server… Use Response to examine header values received in an HTTP protocol response from the server». Y veo que Response («Specifies the header values received from the HTTP server») es otra propiedad pero no publicada sino pública. Es lógico, puesto que no tendría sentido que apareciese en el inspector de objetos.

Estas dos propiedades me despiertan varias dudas: ¿qué es eso de los valores de cabecera? ¿se referirá a lo del método Head que leí antes? ¿qué utilidad tiene? ¿cómo funciona? Tal vez Dec o Domingo lo sepan, qué chévere es contar con ellos . ¿No tendrán otra cosa que hacer? Siempre están dando respuestas, y bastante buenas, son casi genios.

Tag. Seguro esta propiedad se refiere a las pestañas del navegador Mozilla. ¡Jejeje! es una broma que me hago a mí mismo.

Ahora pasemos al ver los eventos del componente...

Me llaman la atención los cuatro últimos, OnStatus, OnWork (vaya nombre menos descriptivo), OnWorkBegin y OnWorkEnd. Me pregunto qué utilidad tienen. Ah, vaya, el primero como que sirve para saber en qué parte del proceso se encuentra la petición al servidor Web. Los OnWorkXXX no me quedan claros, leeré de nuevo la ayuda; interesante: «OnWork is generally used to control the update of progress indicators or GUI components», dice algo similar para los otros dos.

OK, ya le eché un vistazo general a las propiedades y eventos del componente TIdHTTP. Ahora voy a hacer mi primera prueba (¡qué emoción!). Por lo pronto quisiera empezar con una página distinta a la que requiero acceder con mi aplicación. ¿Qué página estará buena para hacer esta prueba? ¿www.ponchito.com, www.youtube.com?..., ¡ah, ya sé! https://login.yahoo.com/config/mail?.intl=us con una cuenta temporal. Con tu permiso Yahoo...
--------------------------------------------------------------------------

De antemano, gracias por auxiliarme con mis dudas . Seguiremos informando.

Un abrazo índyco.

Al González.

Última edición por Al González fecha: 07-11-2006 a las 03:37:11.
Responder Con Cita
  #8  
Antiguo 04-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Vamos a ver si te puedo explicar algunas cosas, al menos como yo las recuerdo de cuando me ley el protocolo para hacer mi pico servidor . Espero no equivocarme mucho ...

Cita:
Empezado por Al
Vaya, la ayuda dice «specifies the HTTP version used for Get, Head, and Post methods for the HTTP client». Entonces sí existen otros métodos (por lo menos uno) además de Get y Post, ¿cómo será eso del método Head?
Es verdad, el protocolo http tiene varios comandos los habituales Get y Post, y algunos otros. Ahora mismo solo me acuerdo del Head y el Connect, pero creo que algún otro hay. El Head básicamente es similar al Get solo que el servidor al responder solo devuelve las cabeceras y no el resto de la respuesta, esto puede ser practico, por ejemplo, si queremos obtener información sobre un archivo, como si esta disponible o cuantos bytes ocupa sin tener que descargarlo. El connect se utiliza para establecer túneles a través de los proxys para las conexiones seguras, pero eso ya es otra historia. Hablando de cabeceras ...

Cita:
Empezado por Al
Estas dos propiedades me despiertan varias dudas: ¿qué es eso de los valores de cabecera? ¿se referirá a lo del método Head que leí antes? ¿qué utilidad tiene? ¿cómo funciona?
En el protocolo http tanto las peticiones (Request) como respuestas (Response) tienen un formato similar. Se dividen en una serie de cabeceras, una linea para cada una y el propio cuerpo del mensaje. Separados por una linea en blanco. Un ejemplo:

Petición de la pagina de google:
Código:
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Accept-Language: es
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Host: www.google.es
Proxy-Connection: Keep-Alive
Se puede ver que la primera linea es el comando (Get,Head,Post,etc), las otras cabeceras dan otra información como el Host, el tipo de navegador, etc. Fíjate en la linea en blanco al final, esta indica el final de las cabeceras y el comiendo de los datos, como es un comando get no hay datos, si fuera un comando Post la información se enviaría a continuación de la linea en blanco.

Y que es lo que nos responde google:
Código:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Server: GWS/2.1
Content-Length: 4289
Date: Sat, 04 Nov 2006 21:01:23 GMT

{A partir de aqui nos manda el documento no lo pongo porque aqui se veria mal}
La primera linea nos indica el código de la respuesta 200 para OK, 404 para no encontrado, 302 para dirigirnos a otro lado, etc ... Las otras nos indican el tipo de documento que nos manda o la longitud, entre otras cosas.

Ahora vamos con otras preguntas que hiciste:
Cita:
Empezado por Al
AuthRetries. Ésta se me hace que la voy a necesitar para el ingreso de usuarios.
El protocolo http cuenta con un sistema de autenticación muy básico, que codifica la contraseña en base64. Quizá lo habrás visto alguna vez al intentar entrar en una pagina protegida muestra un dialogo para introducir el nombre de usuario y contraseña. Este sistema se uso mucho, aunque ahora la mayoría de las paginas utilizan su propio sistema de autenticación contra una base de datos usando un formulario y por ejemplo php, quedando este sistema bastante en desuso. Si la pagina a la que quieres entrar usan un formulario lo mas seguro es que no use este método de autenticación.

Cita:
Empezado por Al
HandleRedirects. Esto me suena a cuando quiero entrar a una página y el navegador me lleva a otra, a veces de forma temporal para decirme que he ganado 50 millones de dólares y churradas similares.
Esto hace que si recibe como respuesta códigos como el 302 pidiendo que se dirija a otra dirección le haga caso y vaya, como ya dijo roman esto puede ser necesario para entrar en alguna pagina.

Bueno, creo que ya llego por ahora, aunque si tienes duda por algo o quieres meterte mas en profundidad en algún tema, tu solo dilo Porque ya sabes "que no tengo otra cosa que hacer"
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Automatizacion de word (generar documentos) alt126 C++ Builder 4 24-04-2007 04:19:27
Automatizacion de word (insertar tablas) alt126 C++ Builder 2 04-11-2005 10:44:29
Consejo Automatizacion Excel Builder C++ alt126 C++ Builder 0 14-04-2005 10:52:04
HTTP Indy bochi Internet 1 27-12-2003 01:57:34
Http Server ebeltete Internet 0 17-05-2003 02:57:39


La franja horaria es GMT +2. Ahora son las 01:41:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi