Hola a todos.
A ver si me podéis echar una mano. He estado buscando trucos, y casos similares al mío y no he visto nada que me termine de valer, así que al final he optado por lanzar la pregunta.
A ver. Por un lado tengo preparado un servidor de páginas ASPx. Y por otro lado me estoy construyendo una aplicación Delphi que se conecte a dicho servidor lanzándole peticiones de páginas. Dichas páginas no las voy a visualizar en pantalla. Simplemente quiero trabajar con el código fuente de esas páginas.
Es decir. Es como si manualmente abriése el iExplorer, me concectase a la página en cuestión, y cuando ya le tuviese cargada en pantalla le doy a "Ver" -> "Código fuente". ¿Me explico? Pues bien, todo esto pero de forma automática y desde dentro del programa Delphi.
He estado probando el componente
TIdHTTP, y sus métodos
Get() y
Post().
Código Delphi
[-]procedure TForm1.Button5Click(Sender: TObject);
Var
S:STRING;
begin
Memo1.Lines.Clear;
try
IdHTTP1.Host:='dirección ip';
IdHTTP1.Port:=80;
IdHTTP1.Request.ContentType := 'text/html; charset=UTF-8';
S:= IdHTTP1.Get('/ruta a la página?parametro=valor');
Memo1.Lines.Add( S );
except
on e:Exception do Begin
ShowMessage(e.Message);
ShowMessage(IntToStr(IdHTTP1.ResponseCode)+'-'+IdHTTP1.ResponseText);
End;
end;
end;
Código Delphi
[-]procedure TForm1.Button1Click(Sender: TObject);
var
aStream: TMemoryStream;
Params: TStringStream;
begin
aStream := TMemoryStream.create;
Params := TStringStream.create('');
try
with IdHTTP1 do
begin
Params.WriteString(URLEncode('parametro=' + 'valor'));
Host:='dirección ip';
Port:=80;
Request.ContentType := 'text/html; charset=UTF-8';
try
Post('http://dirección ip/ruta a la página', Params, aStream);
except
on E: Exception do
showmessage('Error encountered during POST: ' + E.Message);
end;
end;
showmessage('aStream.Size='+IntToStr(aStream.Size)+#13#10+
'aStream.Position='+IntToStr(aStream.Position));
aStream.WriteBuffer(#0' ', 1);
aStream.Position := 0;
Memo1.Lines.LoadFromStream(aStream);
except
end;
end;
Por ahora sólo he conseguido respuesta del servidor con
Get(). El
Post() siempre me da una respuesta vacía, y no sé por qué. ¿Alguna pista?
Las primeras pruebas las estoy haciendo de forma que el servidor me devuelva texto plano, sin más (ni etiquetas HTML, ni nada). Primer problema: las vocales acentuadas y el signo º (de nº) y otros me llegan distorsionados. He probado a cambiar el valor de
IdHTTP1.Request.ContentType, pues según he encontrado en la ayuda es donde se indica el tipo de codificación que se espera recibir. Además me he asegurado de que coincida con el suministrado desde el servidor (
UTF-8). Pero no hay manera. Siempre me llega distorsionado. Sin embargo, si lanzo la petición desde iExplorer, ahí sí se ve bien en su código fuente. ¿Alguna idea?
Esto último me preocupa especialmente. Porque dicho servidor ASPx (ahora en pruebas) en un futuro proveerá información cifrada, y por lo tanto no legible. Así que me estoy empezando a acojonar con los caracteres raros.
¿Alguien sabe de algún otro modo para poderme conectar a un servidor de páginas y capturar directamente todos los bytes que me mande sin que nada me los interprete y cambie antes de que yo los reciba? ¿Por ejemplo quizá utilizando el componente
TClientSocket (también lo he probado pero nunca recibe la respuesta del servidor)?
También he provado a utilizar un
TWebBrowser y acceder después a su contenido. Pero creo que esto último no es posible. No he encontrado la manera.
Por favor, ayudaaaaaaaaaa...
Muchas gracias.