Как автоматически сгенерировать скрытый вход перед отправкой обратно - PullRequest
0 голосов
/ 03 марта 2012

Я давно искал что-то, что могло бы помочь мне с этим.

Это пример ФОРМЫ, в которой я хочу смоделированный вход с помощью curl

<form action="http://www.website.com/login?from=login" class="lightbox_form" method="post" name="login">
<input name="authenticity" type="hidden" value="da1249c71258cd02a8bd038cf3ccca1c9ebef155" />
<input type="text" name="login_or_email" size="20" class="input" id="login">
<input type="password" size="20" name="login_password" class="input" id="word_user">
<button type="submit" class="new_submit"><span class="inner">Log In</span></button>
</form>

Если увидимсясм. ниже

<input name="authenticity" type="hidden" value="da1249c71258cd02a8bd038cf3ccca1c9ebef155" />

Это автоматически сгенерированное скрытое значение, которое менялось каждый раз при перезагрузке сайта.

Я использую CURL, но я не знаю, как получить скрытое поле и отправить обратно в том же сеансе,Пробовал использовать get_meta_tags, но это не работает

set_time_limit(0);
$http_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)";
$header = array();
$header[0]  = "Accept: text/xml,application/xml,application/xhtml+xml,";
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$header[]   = "Cache-Control: max-age=0";
$header[]   = "Connection: keep-alive";
$header[]   = "Keep-Alive: 300";
$header[]   = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[]   = "Accept-Language: en-us,en;q=0.5";
$header[]   = "Pragma: "; // browsers keep this blank.

curl_setopt($ch, CURLOPT_URL, "http://www.website.com/login?from=login");

curl_setopt( $ch, CURLOPT_USERAGENT, $http_agent );
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_COOKIEJAR, ROOT_DIR.'cookies.txt');
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
//curl_setopt($ch, CURLOPT_POSTFIELDS, 'login_or_email=mail&login_password=pass&authenticity_token='.$cag.'');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);


$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);



//print $output;
print_r ($output);

Есть идеи?

Ответы [ 3 ]

1 голос
/ 04 марта 2012

Вы можете использовать pret_match () для получения случайного значения

//$html is the return of the curl request
preg_match('/<input name="authenticity" type="hidden" value="([^"]*)" \/>/', $html, $match);

значение будет в $ match [1].

1 голос
/ 03 марта 2012

Я считаю, что вы должны проанализировать HTML-код, возвращенный вызовом curl_exec, вручную.Библиотека curl не обрабатывает HTML для вас, она обрабатывает содержимое HTTP, но обработка данных, возвращаемых с сервера, зависит от вашего приложения.

0 голосов
/ 09 августа 2015
$regex= '/<input name="authenticity" type="hidden" value="([^"]*)" \/>/i';
if ( preg_match($regex, $html, $list) )
   $rand= $list[0];
else 
    print "Not found";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...