Neftali [Germán.Estévez]
26-01-2011, 11:48:41
Hola compañeros.
Pues aquí estoy, atascado en una tontería (que seguro es una tontería) y no acabo de encontrar salida. No se del tema y estoy dando "palos de ciego" sin encontrar la solución.
Se trata de una página web en la que se introduce la ruta de un fichero y se pulsa un botón (CALCULAR IBP); Eso devuelve otra página de resultados que me gustaría mostrar en Delphi. Mi problema radica en cómo pasar esos parámetros y "pulsar" el botón desde Delphi.
Os adjunto el código de la web (paginaTest.zip)
El código simplificado de la página es este:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta http-equiv="Content-Language" content="es">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="iestilos.css" type="text/css"></head>
<body bgcolor="#ffffff">
<table border="0" cellpadding="0" cellspacing="0" width="543">
<tbody><tr>
<td valign="top" width="94%">
<form name="form1" action="prebabel_e.asp" method="post" enctype="multipart/form-data">
<input name="UDO" value="Desconocida" type="hidden">
<input name="IPO" value="88.6.227.203" type="hidden">
<input name="ENT" value="" type="hidden">
<input name="CFO" value="FFFFFF" type="hidden">
<input name="CTE" value="000000" type="hidden">
<input name="CTA" value="BDBDBD" type="hidden">
<input name="ORI" value="iframe" type="hidden">
<table border="0" cellpadding="0" cellspacing="0" width="596">
<tbody><tr>
<td valign="top" width="298"><font color="#000000"> <b><font size="4">IBP Index</font></b></font></td>
<td width="298">
<p align="center"><b>+ info <a target="_blank" href="http://www.ibpindex.com/">
<font color="#000000">www.ibpindex.com</font></a></b></p></td>
</tr>
<tr>
<td colspan="2" valign="top"> </td>
</tr>
<tr>
<td colspan="2" valign="top"><font color="#000000">Escoge un archivo</font></td>
</tr>
<tr>
<td colspan="2" valign="top">
<p><font color="#000000" face="Verdana" size="1">
<input name="fichero" size="69" type="file"></font></p></td>
</tr>
</tbody></table>
<div align="center">
<table style="border-collapse: collapse;" border="0" cellpadding="0" width="100%">
<tbody><tr>
<td width="50%">
<p align="center"><b>
<font color="#000000" face="Verdana" size="1"><span id="spansubiendo"></span> </font></b></p></td>
</tr>
<tr>
<td width="50%">
<p align="center">
<font color="#000000" face="Verdana" size="1">
<input name="submi" value="Calcular IBP" onclick="subir()" style="width: 100px; height: 20px;" type="button">
</font>
</p></td>
</tr>
<tr>
<td valign="top">
</td>
</tr>
<tr>
<td valign="top">
</td>
</tr>
</tbody></table><br></div>
</form></td>
</tr>
</tbody></table>
<script language="JavaScript">
function subir(){
marcado = 0
alert ("iniciar Subir");
archivo = document.form1.fichero.value;
mierror = "";
if (!archivo) {
mierror = "No has seleccionado ningún archivo";
}else{
cadenasubiendo = "";
subiendo();
form1.submit();
return 1;
}
alert (mierror);
return 0;
}
function subiendo(){
if (!document.layers && !document.all && !document.getElementById) return;
if (cadenasubiendo == "") cadenasubiendo = "Calculando IBP, espera por favor";
else if (!cadenasubiendo == "") cadenasubiendo = "";
if (document.layers) {
document.layers.spansubiendo.document.write(cadenasubiendo);
document.layers.spansubiendo.document.close();
}
else if (document.all) spansubiendo.innerHTML = cadenasubiendo;
else if (document.getElementById) document.getElementById("spansubiendo").innerHTML = cadenasubiendo;
setTimeout("subiendo()", 200);
}
</script>
</body></html>
Al final hay código JavaScript que es el que se llama al pulsar el botón.
La web "on line" es esta: http://www.ibpindex.com/ibpweb.asp?LAN=es
Si queréis probar con una ruta de ejemplo para ver el resultado os adjunto un ZIP (ruta_de_ejemplo.zip) con una.
He revisado mensajes sobre idHTTP utilizando el método Post, como estos:
http://www.clubdelphi.com/foros/showthread.php?t=59912&highlight=IDhttp.Post
http://clubdelphi.com/foros/showthread.php?p=307917#post307917
Pero la verdad es que no se muy bien lo que estoy haciendo ni si lo estoy haciendo bien.
http://img248.imageshack.us/img248/299/imagen565.png
El cuadro de texto tiene las propiedades:
Type=file
Size=69
Name=fichero
Y el botón de CALCULAR IBP:
Type=button
style=...
OnClick=subir()
Value=Calcular IBP
Name=Submi
He probado con un código como este:
var
resp, ruta:string;
TS:TStrings;
Stream:TIdMultipartFormDataStream;
begin
Randomize;
ruta := Trim(Edit1.Text);
if ruta <> '' then begin
Stream := TIdMultipartFormDataStream.Create;
Stream.AddFile('fichero', ruta, 'file');
Stream.AddFormField('submi', 'submi');
resp := IdHTTP.Post('http://www.ibpindex.com/ibpweb.asp?LAN=es', Stream);
end;
TS := TStringList.Create;
TS.Add(resp);
TS.SaveToFile('r:\response' + IntToStr(Random(1000)) + '.txt.html');
FreeAndNil(TS);
y con otro como este:
var
Response: String;
AResponseContent: TMemoryStream;
resp, ruta:string;
TS:TStrings;
begin
Randomize;
AResponseContent := TMemoryStream.CReate();
ruta := Trim(Edit1.Text);
if ruta <> '' then begin
Params.Clear;
Params.Values['Fichero'] := ruta;
Params.Values['submi'] := 's';
resp := IdHTTP.Post('http://www.ibpindex.com/ibpweb.asp?LAN=es', Params);
end;
TS := TStringList.Create;
TS.Add(resp);
TS.SaveToFile('r:\response' + IntToStr(Random(1000)) + '.txt.html');
FreeAndNil(TS);
FreeAndNil(AResponseContent);
Pensando que en resp obtendría la página con el resultado, pero nada.
En ambos casos ruta contiene un path con un fichero de una ruta.
La verdad es que no acabo de entender cómo funciona el tema del Post; También he visto ejemplos pero no son exactamente iguales (por el tema de JavaScript) y por eso tal vez no me está funcionando.
¿Algun alma caritativa que me explique cómo va?
Un saludo.
Pues aquí estoy, atascado en una tontería (que seguro es una tontería) y no acabo de encontrar salida. No se del tema y estoy dando "palos de ciego" sin encontrar la solución.
Se trata de una página web en la que se introduce la ruta de un fichero y se pulsa un botón (CALCULAR IBP); Eso devuelve otra página de resultados que me gustaría mostrar en Delphi. Mi problema radica en cómo pasar esos parámetros y "pulsar" el botón desde Delphi.
Os adjunto el código de la web (paginaTest.zip)
El código simplificado de la página es este:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta http-equiv="Content-Language" content="es">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="iestilos.css" type="text/css"></head>
<body bgcolor="#ffffff">
<table border="0" cellpadding="0" cellspacing="0" width="543">
<tbody><tr>
<td valign="top" width="94%">
<form name="form1" action="prebabel_e.asp" method="post" enctype="multipart/form-data">
<input name="UDO" value="Desconocida" type="hidden">
<input name="IPO" value="88.6.227.203" type="hidden">
<input name="ENT" value="" type="hidden">
<input name="CFO" value="FFFFFF" type="hidden">
<input name="CTE" value="000000" type="hidden">
<input name="CTA" value="BDBDBD" type="hidden">
<input name="ORI" value="iframe" type="hidden">
<table border="0" cellpadding="0" cellspacing="0" width="596">
<tbody><tr>
<td valign="top" width="298"><font color="#000000"> <b><font size="4">IBP Index</font></b></font></td>
<td width="298">
<p align="center"><b>+ info <a target="_blank" href="http://www.ibpindex.com/">
<font color="#000000">www.ibpindex.com</font></a></b></p></td>
</tr>
<tr>
<td colspan="2" valign="top"> </td>
</tr>
<tr>
<td colspan="2" valign="top"><font color="#000000">Escoge un archivo</font></td>
</tr>
<tr>
<td colspan="2" valign="top">
<p><font color="#000000" face="Verdana" size="1">
<input name="fichero" size="69" type="file"></font></p></td>
</tr>
</tbody></table>
<div align="center">
<table style="border-collapse: collapse;" border="0" cellpadding="0" width="100%">
<tbody><tr>
<td width="50%">
<p align="center"><b>
<font color="#000000" face="Verdana" size="1"><span id="spansubiendo"></span> </font></b></p></td>
</tr>
<tr>
<td width="50%">
<p align="center">
<font color="#000000" face="Verdana" size="1">
<input name="submi" value="Calcular IBP" onclick="subir()" style="width: 100px; height: 20px;" type="button">
</font>
</p></td>
</tr>
<tr>
<td valign="top">
</td>
</tr>
<tr>
<td valign="top">
</td>
</tr>
</tbody></table><br></div>
</form></td>
</tr>
</tbody></table>
<script language="JavaScript">
function subir(){
marcado = 0
alert ("iniciar Subir");
archivo = document.form1.fichero.value;
mierror = "";
if (!archivo) {
mierror = "No has seleccionado ningún archivo";
}else{
cadenasubiendo = "";
subiendo();
form1.submit();
return 1;
}
alert (mierror);
return 0;
}
function subiendo(){
if (!document.layers && !document.all && !document.getElementById) return;
if (cadenasubiendo == "") cadenasubiendo = "Calculando IBP, espera por favor";
else if (!cadenasubiendo == "") cadenasubiendo = "";
if (document.layers) {
document.layers.spansubiendo.document.write(cadenasubiendo);
document.layers.spansubiendo.document.close();
}
else if (document.all) spansubiendo.innerHTML = cadenasubiendo;
else if (document.getElementById) document.getElementById("spansubiendo").innerHTML = cadenasubiendo;
setTimeout("subiendo()", 200);
}
</script>
</body></html>
Al final hay código JavaScript que es el que se llama al pulsar el botón.
La web "on line" es esta: http://www.ibpindex.com/ibpweb.asp?LAN=es
Si queréis probar con una ruta de ejemplo para ver el resultado os adjunto un ZIP (ruta_de_ejemplo.zip) con una.
He revisado mensajes sobre idHTTP utilizando el método Post, como estos:
http://www.clubdelphi.com/foros/showthread.php?t=59912&highlight=IDhttp.Post
http://clubdelphi.com/foros/showthread.php?p=307917#post307917
Pero la verdad es que no se muy bien lo que estoy haciendo ni si lo estoy haciendo bien.
http://img248.imageshack.us/img248/299/imagen565.png
El cuadro de texto tiene las propiedades:
Type=file
Size=69
Name=fichero
Y el botón de CALCULAR IBP:
Type=button
style=...
OnClick=subir()
Value=Calcular IBP
Name=Submi
He probado con un código como este:
var
resp, ruta:string;
TS:TStrings;
Stream:TIdMultipartFormDataStream;
begin
Randomize;
ruta := Trim(Edit1.Text);
if ruta <> '' then begin
Stream := TIdMultipartFormDataStream.Create;
Stream.AddFile('fichero', ruta, 'file');
Stream.AddFormField('submi', 'submi');
resp := IdHTTP.Post('http://www.ibpindex.com/ibpweb.asp?LAN=es', Stream);
end;
TS := TStringList.Create;
TS.Add(resp);
TS.SaveToFile('r:\response' + IntToStr(Random(1000)) + '.txt.html');
FreeAndNil(TS);
y con otro como este:
var
Response: String;
AResponseContent: TMemoryStream;
resp, ruta:string;
TS:TStrings;
begin
Randomize;
AResponseContent := TMemoryStream.CReate();
ruta := Trim(Edit1.Text);
if ruta <> '' then begin
Params.Clear;
Params.Values['Fichero'] := ruta;
Params.Values['submi'] := 's';
resp := IdHTTP.Post('http://www.ibpindex.com/ibpweb.asp?LAN=es', Params);
end;
TS := TStringList.Create;
TS.Add(resp);
TS.SaveToFile('r:\response' + IntToStr(Random(1000)) + '.txt.html');
FreeAndNil(TS);
FreeAndNil(AResponseContent);
Pensando que en resp obtendría la página con el resultado, pero nada.
En ambos casos ruta contiene un path con un fichero de una ruta.
La verdad es que no acabo de entender cómo funciona el tema del Post; También he visto ejemplos pero no son exactamente iguales (por el tema de JavaScript) y por eso tal vez no me está funcionando.
¿Algun alma caritativa que me explique cómo va?
Un saludo.