- curl login, download cookies and redirect
123
WT форуми -> PHP MySQL ASP.NET -> curl login, download cookies and redirect
Създайте нова тема Напишете отговор 
Автор Съобщение
vasilev
Турист
Турист

Регистриран на: 07/02/2009 2:41 pm

Support: 24
Bonus: 45
Мнения: 591
Мнение 03/07/2017 10:07 pm     curl login, download cookies and redirect Отговорете с цитат


здравейте,

опитвам се да направя curl логин скрипт който да редиректва на даден url - през който сме се логнали с curl..
проблема е че всеки сайт е различен, някой имат Javascript, други Login submit. Естествено няма как да се направи за всички но поне за повечето може..
логвам се и взимам всички hidden полета, тъй като повечето сайтове ги проверяват. след това ги добавям към user/pass и запазвам cookитата.
сайтът се появява но тук въпросът е с редиректа..
направя ли редирект, губя сесията.

има ли някакъв начин да я запазя ?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 115
Bonus: 223
Мнения: 2938
Мнение 04/07/2017 12:41 pm      Отговорете с цитат


Как така се губи редиректа?
Използваш ли?
PHP code:
CURLOPT_FOLLOWLOCATION => true,

Значи ти си създай клас за обработка на curl пък после си описвай за всеки сайт по отделно какв ти е нужно за логване.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
vasilev
Турист
Турист

Регистриран на: 07/02/2009 2:41 pm

Support: 24
Bonus: 45
Мнения: 591
Мнение 04/07/2017 10:08 pm      Отговорете с цитат


здравей,
използвам да .. но не редиректва.
ясно че ще се опишат да, аз се опитвам първо един да подкарам след това ще се описва.
като тест опитах тук да влезна, влизам но отворя ли страницата или направя ли header location web-tourist.. нямам сесия.
това е кода:

PHP code:
$file='cookies.txt';
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_HEADER => false,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL =>$url,
CURLOPT_REFERER=>$url,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_POST =>1,
CURLOPT_CONNECTTIMEOUT => 3,
CURLOPT_TIMEOUT=>3,
CURLOPT_COOKIEFILE=>$file,
CURLOPT_COOKIEJAR=>$file,
CURLOPT_POSTFIELDS=>"login=true&username=".$user."&password=".$pass.$webfields,
CURLOPT_USERAGENT => 'demo user agent..'
));
$result= curl_exec ($ch);
curl_close ($ch);
echo $result;
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 115
Bonus: 223
Мнения: 2938
Мнение 04/07/2017 11:13 pm      Отговорете с цитат


Защо хедър локация ще ползваш? Просто използваш същият код и подаваш другите страници от които искаш да сваяш инфо.
PHP code:

<?php
$url = "http://web-tourist.net/forum/login.php";
$file='cookies.txt';

$ch = curl_init();
$array = array(
CURLOPT_HEADER => false,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL =>$url,
CURLOPT_REFERER=>$url,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_POST =>1,
CURLOPT_CONNECTTIMEOUT => 3,
CURLOPT_TIMEOUT=>3,
CURLOPT_COOKIEFILE=>$file,
CURLOPT_COOKIEJAR=>$file,
CURLOPT_POSTFIELDS=>"login=true&username=".$user."&password=".$pass.$webfields,
CURLOPT_USERAGENT => 'demo user agent..'
);

curl_setopt_array($ch, $array);
$result1= curl_exec ($ch);

$array[CURLOPT_URL] = "http://web-tourist.net/forum/viewtopic.php?p=671188#671188";
curl_setopt_array($ch, $array);
$result2= curl_exec ($ch);

curl_close ($ch);

// echo $result1;
echo $result2;
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
vasilev
Турист
Турист

Регистриран на: 07/02/2009 2:41 pm

Support: 24
Bonus: 45
Мнения: 591
Мнение 27/07/2017 9:52 am      Отговорете с цитат


не става само с curl но с curl + submit form е ок Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 115
Bonus: 223
Мнения: 2938
Мнение 27/07/2017 10:48 am      Отговорете с цитат


vasilev написа:
не става само с curl но с curl + submit form е ок Smile


Нещо не разбрах но ок. Важното е да си се справил. Very Happy
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
vasilev
Турист
Турист

Регистриран на: 07/02/2009 2:41 pm

Support: 24
Bonus: 45
Мнения: 591
Мнение 01/08/2017 11:37 am      Отговорете с цитат


въпроса е че при curl, кукитата остават на сървъра а не в твоя браузър. затова правиш пост форма на твоя сървър и постваш към уеб сайта.
по този начин все едно постваш от сайта.
някой сайтове ползват js и няма как да стане, но повечето които ползват post форма е ок.
за всеки случай, преди това трябва да вземеш hidden полетата от тази форма и да ги включиш в твоята.. ако все пак искат други input данни Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 115
Bonus: 223
Мнения: 2938
Мнение 02/08/2017 10:56 pm      Отговорете с цитат


vasilev написа:
въпроса е че при curl, кукитата остават на сървъра а не в твоя браузър. затова правиш пост форма на твоя сървър и постваш към уеб сайта.
по този начин все едно постваш от сайта.
някой сайтове ползват js и няма как да стане, но повечето които ползват post форма е ок.
за всеки случай, преди това трябва да вземеш hidden полетата от тази форма и да ги включиш в твоята.. ако все пак искат други input данни Smile

Така както го обясняваш нещо не ми става ясно какво имаш предвид. Прати малко код да те разбера по-добре и някакъв пример. Question
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
vasilev
Турист
Турист

Регистриран на: 07/02/2009 2:41 pm

Support: 24
Bonus: 45
Мнения: 591
Мнение 10/08/2017 9:05 am      Отговорете с цитат


така по-ясно ли е Smile



PHP code:
$thisurl = htmlspecialchars($_GET['url']);
$user=htmlspecialchars($_GET['user']);
$pass=htmlspecialchars($_GET['pass']);
$userfield=htmlspecialchars($_GET['userfield']);
$passfield=htmlspecialchars($_GET['passfield']);
$postbut=htmlspecialchars($_GET['postbut']);
$curl = curl_init($thisurl);
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL =>$thisurl
));
$output = curl_exec($curl);
curl_close($curl);
$dom = new DOMDocument;
$dom->loadHTML($output);
$hidden_inputs = array();
$nodes = $dom->getElementsByTagName('input');
$i=0;
foreach($nodes as $node) {
if($node->hasAttributes()) {
foreach($node->attributes as $attribute) {
if($attribute->nodeName == 'type' && $attribute->nodeValue == 'hidden' && !empty($node->getAttribute('value'))) {
$webfields.="<input type='hidden' name='".$node->getAttribute('name')."' value='".$node->getAttribute('value')."'>";
$i++;
}
}
}
}



HTML code:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>sss</title>
</head>
<body>
<form id="loginForm" name="loginForm" method="post" action="<?php echo $thisurl;?>">
<input name="<?php echo $userfield;?>" type="hidden" value="<?php echo $user;?>" />
<input name="<?php echo $passfield;?>" type="hidden" value="<?php echo $pass;?>" />
<?php echo $webfields; ?>
<input type="hidden" name="<?php echo $postbut;?>" value="true" />
<input type="hidden" name="login" value="true" />
<input type="submit" name="submit" id="sbm" style="display:none;" value="true">
</form>
<script type="text/javascript" src="//code.jquery.com/jquery-2.2.4.min.js"></script>
<script type="text/javascript">$(function() { $("#sbm").click(); });</script>
</body></html>
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
Revelation
Турист
Турист

Регистриран на: 24/03/2013 3:23 pm

Support: 39
Bonus: 78
Мнения: 559
Мнение 10/08/2017 4:08 pm      Отговорете с цитат


Глупости на търкалета. Нали подаваш POSTFIELDS, не е нужно да правиш твоя форма. Просто, когато подаваш POSTFIELDS трябва да си сигурен, че URL-а ти води до файла, който приема формата на сайта. От там трябва да ти се запазят кукика.
Когато използваш curl кукитата се запазват във файл, когато ползваш COOKIEJAR. Кукита не се пазят на сървъра.
Следващата стъпка е да не подаваш повече POSTFIELDS и да подаваш COOKIEFILE, за да използваш нужните сесии, за да знае сървъра, че вече си влязъл в системата.

Тази седмица ми върви на curl проблеми по форумите. Very Happy
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
vasilev
Турист
Турист

Регистриран на: 07/02/2009 2:41 pm

Support: 24
Bonus: 45
Мнения: 591
Мнение 10/08/2017 8:54 pm      Отговорете с цитат


..ок , а може ли пример ? Smile
аз тествах доста но все същото става накрая. curl изкарва резултата но това не ми помага. аз не искам да изкарвам резултата а да влезна в сайта през моя браузър.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
ttta
Нов
Нов

Регистриран на: 11/08/2017 9:41 am

Support: 0
Bonus: 0
Мнения: 14
Мнение 11/08/2017 10:02 am      Отговорете с цитат


За толкова години не научи ли как работи http?

Бисквитките трябва да се пращат от БРАУЗЕРЪТ от който искаш да си логнат. За да стане постановката която си замислил трябва бисквитките от сървъра на който пускаш curl да стигнат до браузера. При това с коректни атрибути и формат.
Най-лесено ще е ако се направи плъгин, който да запише бисквитките локално след успешното им получаване.

Но като ти чета постовете ...
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
123
Страница 1 от 3


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети