Autenticacion user/password en una web

Autenticacion user/password en una web

Postby JmGarcia » Fri Jun 11, 2010 9:27 pm

Necesito "validarme" (con USUARIO y PASSWORD) en una web (foro de meteorología) para capturar datos del tiempo automáticamente.
Necesito que sea con las WinHTTP windows services con el objeto oHttp:=CreateObject("winhttp.winhttprequest.5.1") o similar.

Con este código, cuando entro no me valido:
Code: Select all  Expand view
     
      local oHttp,cResp
      oHttp:=CreateObject("winhttp.winhttprequest.5.1")
      oHttp:SetTimeouts(30000,30000,30000,30000)
      oHttp:Open("GET","http://www.meteoXXXX.com/data.php?day=31&mounth=1&year=2010",.f.)
      oHttp:Send()
      cResp:=oHttp:ResponseText()
 

Pero al ver el código HTML de la variable "cResp" no encuentro por ningún lado la validación, siempre entro como "visitante".
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Autenticacion user/password en una web

Postby Carlos Mora » Mon Jun 14, 2010 10:22 am

Hola Jm,

la autenticación es una cuestión propia del sitio. Normalmente cuando te conectas lo que suele hacerse es establecer una sesión almacenando en el cliente una cookie con la clave de sesión, y los datos de la sesión en el servidor, usando algún mecanismo apropiado, por lo tanto la forma de acceder creo que pasa por establecer una sesion como usuario que genere la cookie de la sesión, y luego enviar esa cookie en las sucesivas consultas para que el servidor sepa que eres tú.
No se como se hace eso con el httprequest, pero seguramente en la documentación te dirá como porque es algo bastante común.

Un saludo,
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Autenticacion user/password en una web

Postby Manuel Valdenebro » Mon Jun 14, 2010 4:24 pm

El acceso a una página web se realiza en Windows con las librerias (dll) WinInet (antigua) ó WinHttp (mas moderna). El acceso se puede realizar directamente, usando funciones en "C".

http://msdn.microsoft.com/en-us/library ... 57(v=VS.85).aspx

En ambos casos, antes de realizar una petición (request), se realizan dos pasos obligatorios:

1) InternetOpen
2) InternetConnect

En la funcion InternetOpen es donde se incluye el usuario y la password.

Tu estás accediendo a través de un atajo por OLE. Desconozco si al crear el objeto con OLE, se podrian incluir otros parámetros ademas de "winhttp.winhttprequest.5.1". Pero en FiveWin, tiene la clase Wininet, con una serie de funciones en "C" que creo pueden permitirte hacer lo que quieres.
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Autenticacion user/password en una web

Postby JmGarcia » Mon Jun 14, 2010 9:11 pm

Haciendo una prueba con este foro (es como el de Meteo, php) por ejemplo el navegador envia estos datos:
POST /ucp.php?mode=login HTTP/1.1
.../...
Cookie: style_cookie=printonly; phpbb3_r8ok8_u=1; phpbb3_r8ok8_k=; phpbb3_r8ok8_sid=795a022cd288???????????c770ba438
.../...
Content-Length: 103
username=USUARIO&password=CONTRASEÑA&redirect=index.php&sid=795a022cd???????????fc770ba438&login=Login


...eso es lo que tengo que tratar de reproducir ¿no?.
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Autenticacion user/password en una web

Postby Carlos Mora » Tue Jun 15, 2010 1:21 pm

Exacto!
Como ves, esas cookies son propias de cada sitio que visitas, y meteo tendrá las suyas. Tendrías que analizar el momento en el que te logueas a Meteo (o lo que sea) a Ver que envía.
El login es un formulario, que en web puede enviar los datos (básicamente) en formato POST o GET. Como respuesta obtendrás una dirección nueva que almacenará una cookies (por cuestiones de seguridad la cookie de sesión cambia antes y despues de loguearte). Luego de obtener la cookie, en las sucesivas consultas tienes que enviar la cookie así el sitio sabrá que eres tú, que estás logueado, y te enviará los datos completos.

Ampliando un poquito lo que aporta Manuel, otra alternativa a Winhttp sería usar CURL, que es universal y que está en los contribs de Harbour. No le he usado con Harbour, pero es la librería 'canónica' para trastear con la web.

Un saludo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Autenticacion user/password en una web

Postby Manuel Valdenebro » Wed Jun 16, 2010 12:02 pm

Carlos Mora wrote:Ampliando un poquito lo que aporta Manuel, otra alternativa a Winhttp sería usar CURL, que es universal y que está en los contribs de Harbour. No le he usado con Harbour, pero es la librería 'canónica' para trastear con la web.


Carlos, yo uso xHarbour, pero me imagino que serán compatibles. ¿Donde puedo bajar esa contribución? ¿Están las fuentes?.
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Autenticacion user/password en una web

Postby Carlos Mora » Thu Jun 17, 2010 3:08 pm

Hola Manuel,

está en los contribs

http://harbour-project.svn.sourceforge. ... ib/hbcurl/

Un saludo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Autenticacion user/password en una web

Postby Manuel Valdenebro » Sun Jun 20, 2010 11:19 am

Carlos Mora wrote:Hola Manuel,

está en los contribs

http://harbour-project.svn.sourceforge. ... ib/hbcurl/

Un saludo


Muchas gracias Carlos.
Un saludo

Manuel
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Autenticacion user/password en una web

Postby JmGarcia » Sat Nov 30, 2013 6:55 pm

Bueno, pues he conseguido resolver el problema ImageImage

El tema era la "autentificación básica" en mi caso.

Os dejo enlaces de interés:
El método "WinHttpRequest object"
http://msdn.microsoft.com/en-us/library/windows/desktop/aa384106(v=vs.85).aspx
El método "SetRequestHeader"
http://msdn.microsoft.com/en-us/library/windows/desktop/aa384060(v=vs.85).aspx
Introducción a la autenticación HTTP
http://msdn.microsoft.com/es-es/library/ms789031(v=vs.110).aspx

Autenticación básica:
La autenticación básica envía una cadena codificada por Base64 que contiene un nombre de usuario y contraseña para el cliente. Base64 no es una forma de cifrado y debe considerarse igual que enviar el nombre de usuario y contraseña en texto no cifrado. Si un recurso necesita ser protegido, considere fervientemente utilizar un esquema de autenticación distinto de la autenticación básica.


El método a usar es "setRequestHeader" que añade un encabezado HTTP y aquí os dejo mi parte de código:
Code: Select all  Expand view
oHttp:=CreateObject("winhttp.winhttprequest.5.1")
oHttp:SetTimeouts(30000,30000,30000,30000)
oHttp:Open("GET",cUrl,.F.)
oHttp:SetRequestHeader("Authorization","Basic dXNlcjpwYXNzd29yZA==") // BASE64 de "user:password"
oHttp:SetRequestHeader("Credentials","user:password")
oHttp:Send()
cPaginaHTML:=oHttp:ResponseText

Image
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 126 guests