|
Автор |
Съобщение |
Потребител
Регистриран на: 07/02/2009 2:41 pm
Support:
Bonus: 45
Мнения: 602
|
03/07/2017 10:07 pm
curl login, download cookies and redirect
|
|
|
здравейте,
опитвам се да направя curl логин скрипт който да редиректва на даден url - през който сме се логнали с curl.. проблема е че всеки сайт е различен, някой имат Javascript, други Login submit. Естествено няма как да се направи за всички но поне за повечето може.. логвам се и взимам всички hidden полета, тъй като повечето сайтове ги проверяват. след това ги добавям към user/pass и запазвам cookитата. сайтът се появява но тук въпросът е с редиректа.. направя ли редирект, губя сесията.
има ли някакъв начин да я запазя ?
|
|
Върнете се в началото |
|
|
Активен
Регистриран на: 02/08/2011 9:24 pm
Support:
Bonus: 231
Мнения: 3057
|
04/07/2017 12:41 pm
|
|
|
Как така се губи редиректа? Използваш ли? PHP code: CURLOPT_FOLLOWLOCATION => true, Значи ти си създай клас за обработка на curl пък после си описвай за всеки сайт по отделно какв ти е нужно за логване. |
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 07/02/2009 2:41 pm
Support:
Bonus: 45
Мнения: 602
|
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; |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 02/08/2011 9:24 pm
Support:
Bonus: 231
Мнения: 3057
|
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;
|
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 07/02/2009 2:41 pm
Support:
Bonus: 45
Мнения: 602
|
|
Върнете се в началото |
|
|
Активен
Регистриран на: 02/08/2011 9:24 pm
Support:
Bonus: 231
Мнения: 3057
|
27/07/2017 10:48 am
|
|
|
vasilev написа: | не става само с curl но с curl + submit form е ок  |
Нещо не разбрах но ок. Важното е да си се справил.  |
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 07/02/2009 2:41 pm
Support:
Bonus: 45
Мнения: 602
|
01/08/2017 11:37 am
|
|
|
въпроса е че при curl, кукитата остават на сървъра а не в твоя браузър. затова правиш пост форма на твоя сървър и постваш към уеб сайта. по този начин все едно постваш от сайта. някой сайтове ползват js и няма как да стане, но повечето които ползват post форма е ок. за всеки случай, преди това трябва да вземеш hidden полетата от тази форма и да ги включиш в твоята.. ако все пак искат други input данни  |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 02/08/2011 9:24 pm
Support:
Bonus: 231
Мнения: 3057
|
02/08/2017 10:56 pm
|
|
|
vasilev написа: | въпроса е че при curl, кукитата остават на сървъра а не в твоя браузър. затова правиш пост форма на твоя сървър и постваш към уеб сайта. по този начин все едно постваш от сайта. някой сайтове ползват js и няма как да стане, но повечето които ползват post форма е ок. за всеки случай, преди това трябва да вземеш hidden полетата от тази форма и да ги включиш в твоята.. ако все пак искат други input данни  |
Така както го обясняваш нещо не ми става ясно какво имаш предвид. Прати малко код да те разбера по-добре и някакъв пример.  |
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 07/02/2009 2:41 pm
Support:
Bonus: 45
Мнения: 602
|
10/08/2017 9:05 am
|
|
|
така по-ясно ли е  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> |
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 24/03/2013 3:23 pm
Support:
Bonus: 96
Мнения: 628
|
10/08/2017 4:08 pm
|
|
|
Глупости на търкалета. Нали подаваш POSTFIELDS, не е нужно да правиш твоя форма. Просто, когато подаваш POSTFIELDS трябва да си сигурен, че URL-а ти води до файла, който приема формата на сайта. От там трябва да ти се запазят кукика. Когато използваш curl кукитата се запазват във файл, когато ползваш COOKIEJAR. Кукита не се пазят на сървъра. Следващата стъпка е да не подаваш повече POSTFIELDS и да подаваш COOKIEFILE, за да използваш нужните сесии, за да знае сървъра, че вече си влязъл в системата. Тази седмица ми върви на curl проблеми по форумите.  |
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 07/02/2009 2:41 pm
Support:
Bonus: 45
Мнения: 602
|
10/08/2017 8:54 pm
|
|
|
..ок , а може ли пример ?  аз тествах доста но все същото става накрая. curl изкарва резултата но това не ми помага. аз не искам да изкарвам резултата а да влезна в сайта през моя браузър. |
|
Върнете се в началото |
|
|
Нов
Регистриран на: 11/08/2017 9:41 am
Support:
Bonus: 0
Мнения: 14
|
11/08/2017 10:02 am
|
|
|
За толкова години не научи ли как работи http?
Бисквитките трябва да се пращат от БРАУЗЕРЪТ от който искаш да си логнат. За да стане постановката която си замислил трябва бисквитките от сървъра на който пускаш curl да стигнат до браузера. При това с коректни атрибути и формат. Най-лесено ще е ако се направи плъгин, който да запише бисквитките локално след успешното им получаване.
Но като ти чета постовете ...
|
|
Върнете се в началото |
|
|
|