scraping password curlopt_userpwd con body php curl login

password - Problema de autentificación de PHP cURL



php curl authentication (1)

La autenticación falla debido a la falta de coincidencia entre el token y las cookies pasadas.

Cuando carga la página para recuperar el token con get_token() el servidor le envía una cookie que no está guardando.

Más tarde, cuando intenta iniciar sesión, el servidor espera recibir la misma cookie que le envió cuando recibió el token . Pero no lo estás enviando.

Te sugiero que reescribas get_token() usando curl y almacenando cookies en cookie.txt . Esto le permitirá pasarlos más tarde cuando llame a login()

Me gusta esto:

function get_token() { $url = ''https://www.foo.com/''; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_COOKIEJAR, "cookie.txt"); curl_setopt($curl, CURLOPT_COOKIEFILE, "cookie.txt"); curl_setopt($curl, CURLOPT_TIMEOUT, 40000); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER[''HTTP_USER_AGENT'']); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); $result = curl_exec($curl); curl_close($curl); unset($curl); $html = str_get_html( $result ); $token = ""; foreach($html->find(''input'') as $element) { if($element->name == "token") { $token = $element->value; } } if (!$token) { die(''No token found''); } return $token; }

Importante:

retirar

$fp = fopen("cookie.txt", "w"); fclose($fp);

Desde login() ya que trunca a cero bytes el archivo cookie.txt , y no desea eliminar la cookie recién recuperada.

Tenga en cuenta que curl_exec() crea el archivo de cookie speciefied si no existe.

Trabajé con HttpFox y comparé los valores (url y datos de publicación) con los que mi código generó. Son completamente iguales, pero siempre veo el mensaje "Error de inicio de sesión" en la página web. No tengo idea de cuál podría ser el problema.

Código:

require ''domparser_1_5/simple_html_dom.php''; $username = "username"; $password = "password"; function login($url,$data){ $fp = fopen("cookie.txt", "w"); fclose($fp); $login = curl_init(); curl_setopt($login, CURLOPT_URL, $url); curl_setopt($login, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt"); curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt"); curl_setopt($login, CURLOPT_TIMEOUT, 40000); curl_setopt($login, CURLOPT_RETURNTRANSFER, true); curl_setopt($login, CURLOPT_USERAGENT, $_SERVER[''HTTP_USER_AGENT'']); curl_setopt($login, CURLOPT_FOLLOWLOCATION, true); curl_setopt($login, CURLOPT_POST, true); curl_setopt($login, CURLOPT_POSTFIELDS, $data); ob_start(); $result = curl_exec($login); ob_end_clean(); curl_close($login); unset($login); return $result; } function generate_pass($user, $password, $token) { if ($password) { $enc_pass = md5($password); $pass = $user.'':''.$enc_pass.'':''.$token; return md5($pass); } } function get_token() { $html = file_get_html(''https://www.foo.com/''); $token = ""; foreach($html->find(''input'') as $element) { if($element->name == "token") { $token = $element->value; } } if (!$token) { die(''No token found''); } return $token; } $token = get_token(); echo login("https://www.foo.com/login/start.html", "user=".$username."&password=".$password."&submit=Anmelden&logintype=login&pid=4%2C93%2C1828&pass=".generate_pass($username, $password, $token)."&redirect_url=login%2Fstart.html&tx_felogin_pi1%5Bnoredirect%5D=0&token=".$token."");