Pregunta

Yo solía usar Indy de vuelta en el Delphi 6 días, y estoy jugando con Indy 10 ahora.Lo que quiero hacer es muy simple, pero no veo una manera sencilla de hacerlo, así que me debe faltar algo.

Lo que quiero hacer es algo como esto:

Aquí es el código que estoy usando:

procedure TForm1.btnGetURLClick(Sender: TObject);
begin
  moHeader.Lines.Clear;
  moBody.Lines.Clear;
  try
    moBody.text := IdHttp1.Get(edURL.text);
  finally
  end;
end;   

Cuando la solicitud está completa, la http_result debe contener el código HTML de la dirección URL especificada.Esto no parece funcionar sin embargo, por lo que me da la sensación de que debo ser, tal vez, el uso de la IOHandler de la propiedad o el evento OnWork de la componente - sin embargo, el uso no parece obvio para mí, y no podía encontrar ningún ejemplos de trabajo con google.Estoy seguro de que esto es algo que se ha hecho antes, así que cualquier ayuda se agradece.

Información Adicional:En el espíritu de ser más específico, me gustaría saber:1.Estoy haciendo este derecho para empezar (o ¿me olvido de algo?).2.Si es así, ¿por qué no podría ser de trabajo.3.Siempre es posible que exista un error en la combinación de compilador/os/Indy que estoy utilizando.(A pesar de que debería estar trabajando).

Debo mencionar, siempre me aparece una ventana de "Conexión Cerrada con Gracia".Esta parece ser una excepción, y que podría estar interfiriendo con el resultado de la función.Hice el intento de atrapar a este con un TRY...FINALLY, pero no funciona.Probablemente porque Indy es la activación de la excepción en el fondo después de que el método Get se ejecuta supongo.

Finalmente, aquí está un video de el programa que se ejecuta para aclarar cualquier confusión:http://screencast.com/t/NDMzNTQ5 Espero que el HTML para llenar el segundo cuadro memo.

¿Fue útil?

Solución

Otra opción, sería el uso de sinapsis.Esto es todo lo que se necesita para recuperar una página web al uso de esta biblioteca:

uses
  ...,HTTPSEND;

var
  Result : TStrings;


  if HTTPGetText('http://www.google.com',Result) then
    // do something with result

Sinapsis es un ligero TCPIP de la biblioteca.La biblioteca se mantiene activa y la versión actual funciona bien en Delphi 2009/2010.NO es un componente basado marco, por lo que es muy fácil de usar con otras técnicas de roscado (OmniThreadLibrary o AsyncCalls por ejemplo).

Otros consejos

creo que tienes la TIdHTTP.HandleRedirects la propiedad se establece en false, si recibe el error "HTTP/1.1 302 Found"usted puede probar esto

var
http_result:string;    
Begin
IdHTTP1.HandleRedirects:=True;
http_result := IdHTTP1.Get('http://www.google.com');

End;

Usted tiene que establecer la propiedad HandleRedirects a la verdad.

No hay necesidad de un formulario, utilizando GExperts componentes de código tengo esto:

var
  IdHTTP: TIdHTTP;

IdHTTP := TIdHTTP.Create(Self);
with IdHTTP do
begin
  Name := 'IdHTTP';
  AllowCookies := True;
  HandleRedirects := True;
  HTTPOptions := [hoForceEncodeParams];
end;

Sólo tienes que pegar esto en su unidad, debe ser todo lo que usted necesita.

Si mal no recuerdo si el sitio web redirige, también es necesario reemplazar algunos de controlador (onredirect o así).Pero este fue también el caso en indy9 iirc.

Esta pregunta ha permanecido abierto durante bastante tiempo, así que estoy cerrando un vistazo.Mi solución fue usar Sinapsis, como uno de los carteles de la sugirió.Funciona en windows/Linux/Mac OS con un mínimo de modificaciones, y funciona bien en las bibliotecas/hilos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top