Curl_init y autentificacion

Caotico

Hola, ando un poco perdido con esto a ver si podéis ayudarme.

Quiero poder parsear una web para obtener unos datos concretos y necesito estar logeado en ella para poder sacar estos datos. La web es la de steam ( http://steamcommunity.com/ )

Al hacer un curl_init siempre me devuelve el código de la web sin estar autentificado, cómo podría hacerlo para que me genere el código de la web que yo veo al estar logeado? Un saludo.

PD: no sé por qué se me ha cambiado la categoría del post, si puede modificarlo un admin..

Kiroushi

Pues vas tener que emular el proceso de autenticación de la web. Lo primero que tendrás que ver es si es un POST (que es lo más seguro), y ver si se hace mediante un request html o ajax.

Tendrás que hacer dos peticiones, la primera con este proceso que te digo, y tras comprobar que te hayas logueado, hacer la petición con el crawling o lo que sea que quieres hacer.

Edit: vale, es Ajax:

	new Ajax.Request( 'https://steamcommunity.com/login/getrsakey/',
		{
			method: 'post',
			parameters: {
				username: username,
				donotcache: ( new Date().getTime() )
			},
			onSuccess: OnRSAKeyResponse,
			onException: function( req, e ) { throw e; }
		}
	);
1 respuesta
Kiroushi

Esa llamada en ajax obtiene una clave RSA que según se ve, depende del nombre de usuario. Cuando tiene esa clave, llama a esta otra función:

function OnRSAKeyResponse( transport )
{
	var results = transport.responseJSON;
	if ( results.publickey_mod && results.publickey_exp && results.timestamp )
	{
		var form = document.forms['logon'];

	var pubKey = RSA.getPublicKey( results.publickey_mod, results.publickey_exp );
	var username = form.elements['username'].value;
	username = username.replace( /[^\x00-\x7F]/g, '' ); // remove non-standard-ASCII characters
	var password = form.elements['password'].value;
	password = password.replace( /[^\x00-\x7F]/g, '' ); // remove non-standard-ASCII characters
	var encryptedPassword = RSA.encrypt( password, pubKey );
	new Ajax.Request( 'https://steamcommunity.com/login/dologin/',
		{
			method: 'post',
			parameters: {
				password: encryptedPassword,
				username: username,
				emailauth: form.elements['emailauth'].value,
				loginfriendlyname: form.elements['loginfriendlyname'].value,
									captchagid: form.elements['captchagid'].value,
				captcha_text: form.elements['captcha_text'].value,
				emailsteamid: form.elements['emailsteamid'].value,
				rsatimestamp: results.timestamp,
				remember_login: ( form.elements['remember_login'] && form.elements['remember_login'].checked ) ? 'true' : 'false',
				donotcache: ( new Date().getTime() )
			},
			onSuccess: OnLoginResponse,
			onException: function( req, e ) { throw e; }
		}
	);
}
else
{
	if ( results.message )
	{
		HighlightFailure( results.message );
	}

	$('login_btn_signin').show();
	$('login_btn_wait').hide();

	g_bLoginInFlight = false;
}
}
1 respuesta
Caotico

#2 #3 Wow muchas gracias, le echaré un vistazo aunque creo que mis conocimientos no llegan para tanto xD

Usuarios habituales

  • Caotico
  • Kiroushi