Página 1 de 1

Referrer para leer datos de página web

Publicado: 20 Abr 2011, 08:34
por jamaro
Buenos días:

Estoy intentando obtener datos de una página web, pero obtengo un error de REFERRER.

Empiezo por el principio. Partimos de una página como: http://segovia.onroll.info/
En ella, aparece un mapa con unos iconos de bicicletas. Si pulsamos sobre uno de ellos, se abre un globo con un enlace "Ver estado de las marquesinas", que nos lleva a una página como http://www.domoblue.com/info_marquesina ... ina=[b]178[/b], donde el número en negrita varía según el icono pulsado.

La página a la que nos lleva nos muestra las bicicletas libres de la marquesina seleccionada.

Pero si yo intento ir a la página http://www.domoblue.com/info_marquesina ... ina=[b]178[/b] sin "venir" del mapa, la página no devuelve el resultado esperado y emite el error: "Es necesario tener activado el REFERER en su navegador para ver estos datos..."

He estado buscando en este y otros foros la manera de poder poner el referrer. Encontré la función _InetGetEx pero, o bien no me funciona, o bien no lo estoy haciendo bien.

He bajado el complemento RefControl para Firefox y configurando en esa página para que fuerce a poner http://www.domoblue.com (supongo que como referrer) y así sí funciona bien la página, devolviendo los datos necesarios.

¿Sabéis cómo se puede hacer? ¿Estaré fallando en el uso de la sintaxis de _InetGetEx?

Saludos

Ejemplo de _InetGetEx

Código: Seleccionar todo

;_INetGetEx("http://www.autoitscript.com/index.php", @TempDir & "\test.txt", True, "AutoIt3Script", "Referrer")
Mis pruebas de _InetGetEx

Código: Seleccionar todo

#include <_INetGetEx.au3>
_INetGetEx("http://www.domoblue.com/info_marquesina.php?id_marquesina=178", @TempDir & "\test.txt", True,"" , "www.domoblue.com")
o
_INetGetEx("http://www.domoblue.com/info_marquesina.php?id_marquesina=178", @TempDir & "\test.txt", True,"" , "http://www.domoblue.com")
o
_INetGetEx("http://www.domoblue.com/info_marquesina.php?id_marquesina=178", @TempDir & "\test.txt", True,"" , "http://segovia.onroll.info")
Código de _InetGetEx

Código: Seleccionar todo

;================================================================================
; Function Name....: _INetGetEx
; Description......: Download a file from the net
; Syntax...........: _INetGetEx($sURL, $sFile[, $fOverWriteCreate = Default[, $sUserAgent = Default[, $sReferrer = Default]]])
; Parameter(s).....: $sURL - The URL of the file to download
;                    $sFile - The local path to save the file to
;                    $fOverWriteCreate - Set to True to overwrite existing file
;                    $sUserAgent - The User-Agent (http://en.wikipedia.org/wiki/User_agent)
;                    $sReferrer - The Referrer (http://en.wikipedia.org/wiki/Referrer)
; Return Value(s)..: Success: 1
;                    Failure: 0 ; sets @error to non-zero and @extended to the returned HTTP Status
;                     @error = 1: $fOverWriteCreate is False and file already exists
;                     @error = 2: Somethng went wrong with the download
; Requirement(s)...: -
; Related..........: -
; Limitation(s)....: -
; Example(s).......: -
; Comment(s).......: http://www.paulsadowski.com/WSH/getremotebinaryfile.htm
; Author(s)........: Robjong
; Modified.........: -
;================================================================================
Func _INetGetEx($sURL, $sFile, $fOverWriteCreate = Default, $sUserAgent = Default, $sReferrer = Default)
;~  Local $adTypeBinary = 1, $adSaveCreateNotExist = 1, $adSaveCreateOverWrite = 2
    Local $iSaveCreateOverWrite = 1
    If $fOverWriteCreate Then $iSaveCreateOverWrite = 2
    If $fOverWriteCreate <> 2 And FileExists($sFile) Then Return SetError(1, 0, 0)
;    If Not $sUserAgent Or $sUserAgent <= -1 Or $sUserAgent == Default Then $sUserAgent = "AutoIt3Script" ; AutoIt
    If Not $sUserAgent Or $sUserAgent <= -1 Or $sUserAgent == Default Then $sUserAgent = "" ; AutoIt
    If Not $sReferrer Or $sReferrer <= -1 Or $sReferrer == Default Then $sReferrer = ""

    Local $oHTTP = ObjCreate('WinHTTP.WinHTTPRequest.5.1')
    $oHTTP.Open('GET', $sURL, False)
    If $sUserAgent Then $oHTTP.SetRequestHeader("User-Agent", $sUserAgent)
    If $sReferrer Then $oHTTP.SetRequestHeader("Referrer", $sReferrer)
    $oHTTP.Send()

    Local $oBinaryStream
    If $oHTTP.Status == 200 Then ; 200 = OK
        $oBinaryStream = ObjCreate("ADODB.Stream")
        $oBinaryStream.Type = 1
        $oBinaryStream.Open
        $oBinaryStream.Write($oHTTP.ResponseBody)
        $oBinaryStream.SaveToFile($sFile, Int($iSaveCreateOverWrite))
        $oBinaryStream.Close
        Return SetError(0, 0, 1)
    EndIf

    $oBinaryStream.Close
    Return SetError(1, $oHTTP.Status, 0)
EndFunc   ;==>_INetGetEx

Re: Referrer para leer datos de página web

Publicado: 20 Abr 2011, 11:43
por BasicOs
No se si enviando un POST de esta manera te puede funcionar antes de leer la página, te viene como enviar variables a la url con POST, aunque lo puedes usar con _IE:
#include <WinHTTP.au3>
Func _Funcion_POST()
$HTTP_Host = "http://www.google.de/search?hl=de&clien ... er&spell=1"
$HTTP_Agent = _WinHttpOpen("Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5") ; Decimos al servidor que usamos ese navegador
$HTTP_Connect = _WinHttpConnect($HTTP_Agent, $HTTP_Host)
Sleep(1000)
EndFunc
_WinHttpCloseHandle($HTTP_Connect)
_WinHttpCloseHandle($HTTP_Agent)
Otros enlaces:
http://www.emesn.com/autoitforum/viewto ... f=4&t=1546

http://www.emesn.com/autoitforum/viewto ... f=3&t=2339
Salu22:)

Re: Referrer para leer datos de página web

Publicado: 21 Abr 2011, 08:24
por jamaro
BasicOS, voy a leer al respecto, porque no conozco esas funciones...

Gracias

Re: Referrer para leer datos de página web

Publicado: 25 Abr 2011, 17:48
por jamaro
Basicos: Al final he conseguido hacerlo funcionar con WinHttp. ¡Gracias!

Re: Referrer para leer datos de página web

Publicado: 26 Abr 2011, 03:28
por BasicOs
jamaro escribió:Basicos: Al final he conseguido hacerlo funcionar con WinHttp. ¡Gracias!
Gracias a tí por el programa de las Bicis
Salu22:)