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")
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: 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