xmlhttp

11/01/2006 - 00:22 por Jimmy | Informe spam
Estoy intentando leer el codigo de una pagina externa para un tratamiento
posterior.
El problema en que la lectura no interpreta correctamente las letras con
acento. La página original tiene definido en cabecera iso-8859-1 y en el
html las letras acentuadas vienen como "á" y no de la forma á

El código que utilizo es:

Set xml = Server.CreateObject("Microsoft.XMLHTTP")
xml.Open "GET","http://www.dominio.com/seccion.php", False
xml.Send
Response.Write xml.responseText
Set xml = Nothing

¿Alguna sugerencia?
Gracias

Preguntas similare

Leer las respuestas

#6 Jimy
13/01/2006 - 12:43 | Informe spam
Ok Miguel. Pero como una atención querría darte un bono de juego para
www.apuestaygana.com. Si quieres contacta conmigo en y
te doy detalles.

Pues siguiendo con el tema. Ahora que ya puedo leer bien el fichero y
mostrarlo, guardarlo,etc. Lo quiero montar es una secuencia para que lea
determinados links internos que vienen en el fichero. La cuestión que el
número de esos links es desconocido a priori y son del tipo
http://www.miapuesta.info/banner/ba...e&nota63
los digitos 1563 son variables.
Una vez que obtenga el link hay que ir a leer ese archivo para guardarlo.

En general se trata de leer toda una serie de ficheros y sus enlaces para
guardarlos y tener una website propia. Por cierto hay consentimiento del
autor.

Igual estoy abusando mucho de tu saber.
Saludos.


"Miguel Gonzalez" escribió en el mensaje
news:
Gracias por el ofrecimiento Jimy, de veras, pero ya "voy servido" de
trabajo...

Me alegro de haberte podido ayudar.

Saludos!
Miguel

Jimmy escribió:
Miguel,
Eres un ckack. Funciona ok.
Dije que iba tener una atención y así lo voy a hacer. Además estoy
buscando a una persona para desarrollar unos temas muy beneficiosos y
puede que te interese.
Mándame tu email o tfno. a

Gracias y saludos.

"Miguel Gonzalez" escribió en el mensaje
news:%

Hola Jimmy.

He estado mirando el problema y creo que he dado con una solución
relativamente sencilla. Se trata de utilizar el método "responseBody"
(que recibe un array binario, en bruto, del "response" del servidor
remoto) y "decodificarlo" mediante una función que "recupere" los
caracteres:

<%
' Aqui la funcion
Function decodifica(texto)
'Convierte el array binario recibido caracter a caracter
Dim textoOk
textoOk = ""
For i = 0 To UBound(texto)
textoOk = textoOk & ChrW(AscW(Chr(AscB(MidB(texto, i + 1, 1)))))
Next
decodifica = textoOk
End Function

'...Y aqui la parte XMLHTTP
uRLRemota = "http://www.miapuesta.info/banner/ba....php"
Set objXml = Server.CreateObject("Msxml2.ServerXMLHTTP")
objXml.Open "GET", uRLRemota, False
objXml.Send()
Response.AddHeader "Content-Type", "text/html; charset=iso-8859-1"
Response.Write decodifica(objXml.responseBody)
Set objXml = Nothing
%>

Nota: Para mayor seguridad, se envian encabezados de codificación
"iso-8859-1" al navegador cliente (AddHeader)

Saludos!
Miguel


Jimmy escribió:

Miguel,

En primer lugar agradecerte las molestias que te has tomado.
Lo que pretendo hacer es obtener diariamente el contenido de la página que
te pasé, grabarla en mi server y a continuación poderla mostrar. Podría
hacerlo directamente con un iframe pero estaría penalizado por los
buscadores y por eso quiero tener los ficheros con todo el contenido. Al
servidor remoto no tengo ningún tipo de acceso ni posiblidad de tenerlo.
He encontrado el componente asphttp.dll que parece que funciona pero esde
pago.
Lo que me extraña que no haya solución porque seguro que casos comoel mío
los hay.
Tampoco me importaria que la solución fuese en aspx.
Gracias de nuevo y saludos


"Miguel Gonzalez" escribió en el mensaje
news:%
Hola Jimy.

He estado mirando las referencias y, hasta donde se, la solución pasapor
indicar la codificación en
el propio archivo fuente de datos del servidor remoto. Ello es debido aque
el objeto
"ServerXMLHTTP" utiliza la codificación UTF-8 para la transferencia de
datos a menos que se le
indique lo contrario en el fichero fuente de datos. Creo que lo mejor
sería que buscaras una
alternativa a lo que quieres hacer. Si te explicas un poco más a lo mejor
podemos orientarte de
alguna forma.

Saludos!
Miguel


Jimy escribió:


Gracias por la repuesta.
Pero sigue sin funcionar. El problema creo que es que el servidor dá una
respuesta "personalizada" y los caracteres especiales viajan mal.
Quizá habría que mandar previamente una cabeceras. Pero no tengo niidea
de cómo hacerlo. Si alguien lo me puediese decir.
La url de la que se obtiene el código es:
http://www.miapuesta.info/banner/ba...eccion.php

Si alguien me ayuda tendré una pequeña atención.

Saludos.

"Miguel Gonzalez" escribió en el mensaje
news:

Hola Jimmy.

Creo que sería mejor que utilizaras el objeto "ServerXMLHTTP", que es
mucho más eficiente para el intercambio de información entre servidores.

El "response", para que respete las cabeceras de codificación, cabría
hacerlo de la siguiente manera:

<%
Response.Write objXml.responseXML.text
%>

Un consejo último, evita usar como nombres del objeto o variable todolo
que pueda confundirse con nombres de funciones, métodos o propiedades,
ya que pueden producirse "errores imprevisibles". En tu caso, en vez de
"Set xml...", podrías usar otro nombre para el objeto, tal como
"objXml...", por ejemplo:

<%
Set objXml = Server.CreateObject("Msxml2.ServerXMLHTTP")
%>

Saludos!
Miguel


Jimmy escribió:



Estoy intentando leer el codigo de una pagina externa para un
tratamiento posterior.
El problema en que la lectura no interpreta correctamente las letras con
acento. La página original tiene definido en cabecera iso-8859-1 y en el
html las letras acentuadas vienen como "á" y no de la forma &aacute;

El código que utilizo es:

Set xml = Server.CreateObject("Microsoft.XMLHTTP")
xml.Open "GET","http://www.dominio.com/seccion.php", False
xml.Send
Response.Write xml.responseText
Set xml = Nothing

¿Alguna sugerencia?
Gracias
















Respuesta Responder a este mensaje
#7 Miguel Gonzalez
15/01/2006 - 14:28 | Informe spam
Hola Jimy.

Gracias por el ofrecimiento del "bono", pero no es necesario. La colaboración en este foro es
puramente voluntaria. Te agradezco el detalle, pero es que, además y por convicción personal, no
participo en juegos de azar. :-)

En relación a tu pregunta, el tema sería muy sencillo y eficiente si lo que se trabajara fuera un
fichero XML correctamente estructurado: Sólo habría que rescatar los nodos que contuvieran los
enlaces, proceder a leer su contenido y operar con el mismo. Dado que es un HTML (que puede estar
incorrectamente estructurado), se me ocurre, de entrada, que se podría hacer lo siguiente:

Antes de guardar la página "madre", recorrer el texto buscando los atributos "href" y almacenar en
un array las URLs que contienen. Luego, recorrer el array volviendo a capturar las nuevas páginas.

Algo así:

<%
'En la variable "texto" está almacenada la página
Dim j, hayRuta, urlRuta, tempTexto
j = 0
hayRuta = False
urlRuta = ""
Dim rutas()
For i = 1 To Len(texto)
tempTexto = tempTexto & Mid(texto, i, 1)
If hayRuta Then
If Right(tempTexto, 1) = """" Then
j = j + 1
ReDim Preserve rutas(j)
rutas(j) = urlRuta
hayRuta = False
urlRuta = ""
Else
urlRuta = urlRuta & Right(tempTexto, 1)
End If
End if
If Right(tempTexto, 6) = "href=""" Then
hayRuta = True
End If
Next
' Luego se recorre el array "rutas" recuperando cada página
' y haces lo que tengas que hacer
For i = 0 To UBound(rutas)
Response.Write rutas(i) & "<br>"
Next
%>

Nota: Atención al tipo de rutas presentes en los enlaces. Si son absolutas (que contienen la
dirección completa al recurso) no hay problema, pero si son relativas, tendrás que agregar a cada
dirección la parte que falta de la URL.

De todas formas, no acabo de entender la utilidad de tu estrategia: si lo que se trata es de copiar
un sitio entero (me parece deducir que los usuarios no ejecuturán el ASP, sino que verán las páginas
guardadas anteriormente por dicho ASP), ¿por qué no utilizas alguna herramienta específica de
descarga de sitios completos, o bien te creas un "mirror" (espejo) directamente via FTP?. Por otro
lado, si los usuarios sí ejecutan el ASP, y lo que buscas es solo que los enlaces de la página
servida sean navegables, te basta con agregar al "head" del documento la directiva <base href="URL
de la página original">

Saludos!
Miguel


Jimy escribió:
Ok Miguel. Pero como una atención querría darte un bono de juego para
www.apuestaygana.com. Si quieres contacta conmigo en y
te doy detalles.

Pues siguiendo con el tema. Ahora que ya puedo leer bien el fichero y
mostrarlo, guardarlo,etc. Lo quiero montar es una secuencia para que lea
determinados links internos que vienen en el fichero. La cuestión que el
número de esos links es desconocido a priori y son del tipo
http://www.miapuesta.info/banner/ba...e&nota63
los digitos 1563 son variables.
Una vez que obtenga el link hay que ir a leer ese archivo para guardarlo.

En general se trata de leer toda una serie de ficheros y sus enlaces para
guardarlos y tener una website propia. Por cierto hay consentimiento del
autor.

Igual estoy abusando mucho de tu saber.
Saludos.


"Miguel Gonzalez" escribió en el mensaje
news:
Gracias por el ofrecimiento Jimy, de veras, pero ya "voy servido" de
trabajo...

Me alegro de haberte podido ayudar.

Saludos!
Miguel

Jimmy escribió:

Miguel,
Eres un ckack. Funciona ok.
Dije que iba tener una atención y así lo voy a hacer. Además estoy
buscando a una persona para desarrollar unos temas muy beneficiosos y
puede que te interese.
Mándame tu email o tfno. a

Gracias y saludos.

"Miguel Gonzalez" escribió en el mensaje
news:%

Hola Jimmy.

He estado mirando el problema y creo que he dado con una solución
relativamente sencilla. Se trata de utilizar el método "responseBody"
(que recibe un array binario, en bruto, del "response" del servidor
remoto) y "decodificarlo" mediante una función que "recupere" los
caracteres:

<%
' Aqui la funcion
Function decodifica(texto)
'Convierte el array binario recibido caracter a caracter
Dim textoOk
textoOk = ""
For i = 0 To UBound(texto)
textoOk = textoOk & ChrW(AscW(Chr(AscB(MidB(texto, i + 1, 1)))))
Next
decodifica = textoOk
End Function

'...Y aqui la parte XMLHTTP
uRLRemota = "http://www.miapuesta.info/banner/ba....php"
Set objXml = Server.CreateObject("Msxml2.ServerXMLHTTP")
objXml.Open "GET", uRLRemota, False
objXml.Send()
Response.AddHeader "Content-Type", "text/html; charset=iso-8859-1"
Response.Write decodifica(objXml.responseBody)
Set objXml = Nothing
%>

Nota: Para mayor seguridad, se envian encabezados de codificación
"iso-8859-1" al navegador cliente (AddHeader)

Saludos!
Miguel


Jimmy escribió:


Miguel,

En primer lugar agradecerte las molestias que te has tomado.
Lo que pretendo hacer es obtener diariamente el contenido de la página que
te pasé, grabarla en mi server y a continuación poderla mostrar. Podría
hacerlo directamente con un iframe pero estaría penalizado por los
buscadores y por eso quiero tener los ficheros con todo el contenido. Al
servidor remoto no tengo ningún tipo de acceso ni posiblidad de tenerlo.
He encontrado el componente asphttp.dll que parece que funciona pero esde
pago.
Lo que me extraña que no haya solución porque seguro que casos comoel mío
los hay.
Tampoco me importaria que la solución fuese en aspx.
Gracias de nuevo y saludos


"Miguel Gonzalez" escribió en el mensaje
news:%
Hola Jimy.

He estado mirando las referencias y, hasta donde se, la solución pasapor
indicar la codificación en
el propio archivo fuente de datos del servidor remoto. Ello es debido aque
el objeto
"ServerXMLHTTP" utiliza la codificación UTF-8 para la transferencia de
datos a menos que se le
indique lo contrario en el fichero fuente de datos. Creo que lo mejor
sería que buscaras una
alternativa a lo que quieres hacer. Si te explicas un poco más a lo mejor
podemos orientarte de
alguna forma.

Saludos!
Miguel


Jimy escribió:



Gracias por la repuesta.
Pero sigue sin funcionar. El problema creo que es que el servidor dá una
respuesta "personalizada" y los caracteres especiales viajan mal.
Quizá habría que mandar previamente una cabeceras. Pero no tengo niidea
de cómo hacerlo. Si alguien lo me puediese decir.
La url de la que se obtiene el código es:
http://www.miapuesta.info/banner/ba...eccion.php

Si alguien me ayuda tendré una pequeña atención.

Saludos.

"Miguel Gonzalez" escribió en el mensaje
news:

Hola Jimmy.

Creo que sería mejor que utilizaras el objeto "ServerXMLHTTP", que es
mucho más eficiente para el intercambio de información entre servidores.

El "response", para que respete las cabeceras de codificación, cabría
hacerlo de la siguiente manera:

<%
Response.Write objXml.responseXML.text
%>

Un consejo último, evita usar como nombres del objeto o variable todolo
que pueda confundirse con nombres de funciones, métodos o propiedades,
ya que pueden producirse "errores imprevisibles". En tu caso, en vez de
"Set xml...", podrías usar otro nombre para el objeto, tal como
"objXml...", por ejemplo:

<%
Set objXml = Server.CreateObject("Msxml2.ServerXMLHTTP")
%>

Saludos!
Miguel


Jimmy escribió:




Estoy intentando leer el codigo de una pagina externa para un
tratamiento posterior.
El problema en que la lectura no interpreta correctamente las letras con
acento. La página original tiene definido en cabecera iso-8859-1 y en el
html las letras acentuadas vienen como "á" y no de la forma &aacute;

El código que utilizo es:

Set xml = Server.CreateObject("Microsoft.XMLHTTP")
xml.Open "GET","http://www.dominio.com/seccion.php", False
xml.Send
Response.Write xml.responseText
Set xml = Nothing

¿Alguna sugerencia?
Gracias


















email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida