Авторизация на вордпрессе курлом

Статус
В этой теме нельзя размещать новые ответы.

phillip

Полезный
Регистрация
4 Сен 2007
Сообщения
411
Реакции
15
Пробую авторизоваться на вордпрессе- ничего не выходит. алгоритм такой-
1)курлом вытаскиваем страницу адрес_блога/wp-login.php
2)выпарсиваем hidden значения и помещаем в массив $query, добавляем в этот же массив элементы с логином и пассом
PHP:
$query['log']= $login;
$query['pwd']= $pass;
3) отправляем POST запрос на страницу адрес_блога/wp-login.php

результат- нифига. проверьте, пожалуйста, у себя. Или подскажите где я ошибся. спасибо
PHP:
<?php
//header('Content-Type: text/plain');

$blog= 'http://charliestories.blogvis.com/';
$login= 'charlie';
$pass= 'TmsFCd0d8qu1';
echo blogvis_posting($blog, $login, $pass);

function blogvis_posting($blog_url, $login, $pass){
$avtorize_page= $blog_url.'wp-login.php';

  $agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7'; 
  $header[] = "Accept: text/html;q=0.9, text/plain;q=0.8, image/png, */*;q=0.5" ; 
  $header[] = "Accept_charset: windows-1251, utf-8, utf-16;q=0.6, *;q=0.1"; 
  $header[] = "Accept_encoding: identity"; 
  $header[] = "Accept_language: en-us,en;q=0.5"; 
  $header[] = "Connection: close"; 
  $header[] = "Cache-Control: no-store, no-cache, must-revalidate"; 
  $header[] = "Keep_alive: 300"; 
  $header[] = "Expires: Thu, 01 Jan 1970 00:00:01 GMT"; 


	// GO TO Avtorize PAGE
  $ch = curl_init();  
  curl_setopt($ch, CURLOPT_URL, $avtorize_page); 
  curl_setopt($ch, CURLOPT_HEADER, 1); 
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
  curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
  curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  
  curl_setopt ( $ch , CURLOPT_USERAGENT , $agent); 
  curl_setopt ( $ch , CURLOPT_HTTPHEADER , $header); 
  $result = curl_exec($ch); 
  curl_close($ch); 
 
  
preg_match_all('&<input.+type=\"hidden\".+>&iU', $result, $inputs);

$query = array();
foreach ($inputs[0] as $input) {
preg_match('&<input.+type=\"hidden\".+name=\"(.+)\".+value=\"(.+)\".+>&iU', $input, $inp);
if (isset($inp[1])) {
if (isset($inp[2])) $query[$inp[1]]=$inp[2]; else $query[$inp[1]]='';
}
}
	$query['log']= $login;
	$query['pwd']= $pass;
	print_r($query);
}


  $ch = curl_init();  
  curl_setopt($ch, CURLOPT_URL,$avtorize_page);  
  curl_setopt($ch, CURLOPT_HEADER, 1); 
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
  curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
  curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  
  curl_setopt($ch, CURLOPT_POST, 1); 
  curl_setopt($ch, CURLOPT_POSTFIELDS, $query); 
  curl_setopt ( $ch , CURLOPT_USERAGENT , $agent); 
  curl_setopt ( $ch , CURLOPT_HTTPHEADER , $header); 
  curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
  curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
  $result = curl_exec($ch); 
  curl_close($ch);  
  echo $result;
?>
 
Вот что должно отсылаться при авторизации:

PHP:
log	admin
pwd	admin
wp-submit	Log In
redirect_to	http://твой_урл/wp-admin/
testcookie	1

Проверь, так ли? У тебя не отсылается wp-submit Log In сейчас.

Плюс, проверь, правильно ли парсятся hidden поля. Выведи строку с запросом перед отправкой

А, вон у тебя print_r, что выводит?
 
А почему не передаешь все поля формы:
wp-submit = Log In, rememberme = forever;
 
А, собсно, авторизация, оказывается и без всех полей проходит.

Ты сам в своем коде запутался... Советую научиться писать нормально, я уж не говорю, что б другим понятно было... Хотя бы, что б сам понимал, где функция кончается...

PHP:
<?php

//Функция логина в WP
function blogvis_posting($blog_url, $login, $pass){
	$avtorize_page= $blog_url.'wp-login.php';

	$agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7'; 
	$header[] = "Accept: text/html;q=0.9, text/plain;q=0.8, image/png, */*;q=0.5" ; 
	$header[] = "Accept_charset: windows-1251, utf-8, utf-16;q=0.6, *;q=0.1"; 
	$header[] = "Accept_encoding: identity"; 
	$header[] = "Accept_language: en-us,en;q=0.5"; 
	$header[] = "Connection: close"; 
	$header[] = "Cache-Control: no-store, no-cache, must-revalidate"; 
	$header[] = "Keep_alive: 300"; 
	$header[] = "Expires: Thu, 01 Jan 1970 00:00:01 GMT"; 

	//Заходим на страницу авторизации
	$ch = curl_init();  
	curl_setopt($ch, CURLOPT_URL, $avtorize_page); 
	curl_setopt($ch, CURLOPT_HEADER, 1); 
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
	curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
	curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  
	curl_setopt ( $ch , CURLOPT_USERAGENT , $agent); 
	curl_setopt ( $ch , CURLOPT_HTTPHEADER , $header); 
	$result = curl_exec($ch); 
	curl_close($ch);  
  
	//Грабим поля формы
	preg_match_all('&<input.+type=\"hidden\".+>&iU', $result, $inputs);
	$query = array();
	foreach ($inputs[0] as $input) {
		preg_match('&<input.+type=\"hidden\".+name=\"(.+)\".+value=\"(.+)\".+>&iU', $input, $inp);
		if (isset($inp[1]))
			if (isset($inp[2])) $query[$inp[1]]=$inp[2]; else $query[$inp[1]]='';
	}
	$query['log']= $login;
	$query['pwd']= $pass;

	//Авторизируемся
	$ch = curl_init();  
	curl_setopt($ch, CURLOPT_URL,$avtorize_page);  
	curl_setopt($ch, CURLOPT_HEADER, 1); 
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
	curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
	curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  
	curl_setopt($ch, CURLOPT_POST, 1); 
	curl_setopt($ch, CURLOPT_POSTFIELDS, $query); 
	curl_setopt ( $ch , CURLOPT_USERAGENT , $agent); 
	curl_setopt ( $ch , CURLOPT_HTTPHEADER , $header); 
	curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
	curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
	$result = curl_exec($ch); 
	curl_close($ch);  
	echo $result;
}

$blog = 'http://charliestories.blogvis.com/';
$login = 'charlie';
$pass = 'TmsFCd0d8qu1';

blogvis_posting($blog, $login, $pass);
 
Зачем
PHP:
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
ты ж даже не через прокси работаешь. Многие страницы могут просто не успеть загрузится.
 
в своем коде разобраться ВСЕГДА могу. и не думаю что даже вам там что-то было неясно! :)
про wp-submit = Log In заранее знал что это необязательный параметр, ибо проверил перехватчиком данных.
просто переработал и устал, вот и результат. Спасибо всем за ответы. curl_setopt($ch, CURLOPT_TIMEOUT, 10); действительно, надо сделать поболее))
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху