2017-02-03 4 views
2

im используя curl для входа на bukalapak.com. , но всегда перенаправлять «вы перенаправляетесь» & Я решаю его использовать curl followlocation true, но почему бы не войти в систему после перенаправления? помочь мне & спасибо, прежде чемbukalapak.com login using php curl

<?php 
 
function curl($url, $post){ 
 
$curl = curl_init(); 
 
curl_setopt_array($curl, 
 
array(CURLOPT_URL => $url, //put your url here 
 
CURLOPT_SSL_VERIFYPEER => false, 
 
CURLOPT_SSL_VERIFYHOST => false, 
 
CURLOPT_RETURNTRANSFER => true, 
 
//CURLOPT_ENCODING => "", 
 
CURLOPT_POSTREDIR => 3, 
 
CURLOPT_HEADER => true, 
 
//CURLOPT_MAXREDIRS => 10, 
 
//CURLOPT_TIMEOUT => 30, 
 
//CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 
 
CURLOPT_CUSTOMREQUEST => "GET", 
 
CURLOPT_POST => true, 
 
CURLOPT_FOLLOWLOCATION => false, 
 
CURLOPT_COOKIEFILE => "cookie.txt", 
 
CURLOPT_COOKIEJAR => "cookie.txt", 
 
CURLOPT_POSTFIELDS => $post, 
 
CURLOPT_HTTPHEADER => array(
 
"cache-control: no-cache", 
 
"Content-type: text/html; charset=UTF-8" 
 
), 
 
)); 
 

 
$response = curl_exec($curl); 
 
$info = curl_getinfo($curl); 
 
$err = curl_error($curl); 
 
curl_close($curl); 
 
return $response; 
 
} 
 

 
$p = array(
 
"user_session[username]"=>"[email protected]", 
 
"user_session[password]"=>"Blablabla", 
 
"commit"=>"Login", 
 
"comeback"=>"%2F" 
 
); 
 

 
$login = curl("https://www.bukalapak.com/user_sessions", http_build_query($p)); 
 

 
echo $login; 
 
?>

HTTP/1.1 302 Found Server: nginx Date: Fri, 03 Feb 2017 06:28:03 GMT Content-Type: text/html; charset=utf-8 Location: https://www.bukalapak.com/ Transfer-Encoding: chunked Connection: keep-alive Status: 302 Found Cache-Control: max-age=0, private, must-revalidate, no-transform X-We-Need-To-Talk: Hey, you need to check out https://www.bukalapak.com/careers :) Vary: Origin X-Permitted-Cross-Domain-Policies: none X-XSS-Protection: 1; mode=block X-Request-Id: 90f9ca9a-4ade-4c3d-a0ea-592effd5c2ee X-Download-Options: noopen X-Found-Something: Found any vulnerabilities in our system? https://www.bukalapak.com/bug_reports X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff Set-Cookie: _mkra_ctxt=8891a37006424c9c608a41bf3f6558de--302; path=/; max-age=5; HttpOnly Set-Cookie: lskjfewjrh34ghj23brjh234=RjhGMUlkUEpHb0NOaTNLeUFoT2x2RmxZeWxDTWRySEV6aUc4a0tBOWhqbGdZVS9kWUlOZHFOSXNVZWt2UmJCTkFBRXZLVW8wd21rUktrYXZQR05lUU01aHRuemdzVi91WnFqcUFid2s0MVhUbGhmQXk0cGIrVU5iaXR3UW1HQ21LeHJHRHhMRGZucGo3UUluZ2FLbjJMSWZiZVExODgyRmtUQXJaMTZjYVQxMXZSOWg5U3FGeHZZTGdxVllNTFp4MGtDcnJiaEEwL0NkTVNNT2lTWE8yQXNtNEIzWTVKc0h4NVdVeEVKYnZMSVFMQ29KcysyUGdnK2VZaWNLaVozL3NXYzVIcXlHWkY4SDZESjF4RXp6ak5wVXVOeXRXdjZ0YkZ1UWhPQVJNcjA9LS1od2k3aTgzM3pBSEx5TDVqcE9ZWUZ3PT0%3D--0f995ca0f739bbb3f94b4e92b6628da326a2cb5c; domain=.bukalapak.com; path=/; HttpOnly Strict-Transport-Security: max-age=31536000; includeSubdomains You are being redirected.

ответ

0

Во-первых, для входа в систему, необходимо действительное печенье идентификатор сеанса и "authenticity_token" комбо. каждый сеанс cookie имеет свой собственный уникальный authenticity_token, и если вы не опубликуете правильный 1, вы не сможете войти в систему.

Ваш код не делает попыток достичь аутентичности.

вам также не хватает пустых параметров входа, что может сделать логин невозможным. упомянуть некоторые из них, utf8, comeback, ab_keep_login и commit (и есть больше)

также, ваше использование кода multipart/form-data кодирование, но сайт использовать application/x-www-form-urlencoded кодировки, так исправить, что (использование http_build_query генерировать действительную й-www- форм-urlencoded строка)

сначала сделать запрос GET на страницу входа в систему, убедитесь, что куки включены, разобрать все <input> теги, которые принадлежат запрос входа в систему (но предупреждение, существует несколько форм в HTML, содержащей <input> теги, вам нужны только входные данные, принадлежащие форме входа, aka id new_user_session), их имена и значения (используйте DOMD ocument для этого), измените переменные имени пользователя и пароля и отправьте запрос POST для входа со всеми этими тегами и убедитесь, что используете кодировку application/x-www-form-urlencoded (ака, что дает http_build_query), как и в реальном браузере.

использованием hhb_curl из https://github.com/divinity76/hhb_.inc.php/blob/master/hhb_.inc.php, вот пример (он должен работать, если реальное имя пользователя/пароль)

<?php 
declare(strict_types = 1); 
require_once ('hhb_.inc.php'); 
$hc = new hhb_curl(); 
$hc->_setComfortableOptions(); 
$hc->exec ('https://www.bukalapak.com/user_sessions'); 
$html = $hc->getResponseBody(); 
$domd = @DOMDocument::loadHTML ($html); 
$inputs = array(); 
foreach ($domd->getElementById ("new_user_session")->getElementsByTagName ("input") as $input) { 
    $inputs [$input->getAttribute ("name")] = $input->getAttribute ("value"); 
} 
var_dump ($inputs); 
assert (array_key_exists ('authenticity_token', $inputs)); 
$inputs ['user_session[username]'] = '[email protected]'; 
$inputs ['user_session[password]'] = 'Blablabla'; 
$hc->setopt_array (array (
     CURLOPT_POST => true, 
     CURLOPT_POSTFIELDS => http_build_query ($inputs), 
     CURLOPT_URL => 'https://www.bukalapak.com/user_sessions', 
     CURLOPT_HTTPHEADER => array (
       'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' 
     ) 
)); 
$hc->exec(); 
$html = $hc->getResponseBody(); 
hhb_var_dump ($hc->getStdErr(), $hc->getResponseBody());