проблема со входом в cURL - PullRequest
       9

проблема со входом в cURL

0 голосов
/ 26 февраля 2010

Использование cURL, чтобы очистить безопасную (то есть, логин) страницу, и я в своем уме.Мне удалось успешно очистить два сайта практически без проблем, и теперь я просто не могу войти на этот сайт.cURL получает все страницы, которые я прошу, но они все не вошли в систему, что не помогает.Поэтому, может быть, кто-то может обнаружить ошибку, которую я пропустил?

Код:

$url_to = 'http://fastorder.newrock.es/store2009/index.php/customer/account/loginPost/';
$url_from = 'http://fastorder.newrock.es/store2009/index.php/customer/account/login/';
$url_get = 'http://fastorder.newrock.es/store2009/index.php/';
$name_pass = 'login%5Busername%5D=*****&login%5Bpassword%5D=*****&send=';

function login($link,$user,$from) {
    $fp = fopen("cookie.txt", "w");
    fclose($fp);
    $log = curl_init();
    curl_setopt($log, CURLOPT_REFERER, $from);
    curl_setopt($log, CURLOPT_URL, $link);
    curl_setopt($log, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($log, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($log, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6");
    curl_setopt($log, CURLOPT_TIMEOUT, 40);
    curl_setopt($log, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($log, CURLOPT_HEADER, TRUE);
    curl_setopt($log, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($log, CURLOPT_POST, TRUE);      
    curl_setopt($log, CURLOPT_POSTFIELDS, $user);
    $data = curl_exec($log);
    curl_close($log);
}

login($url_to,$name_pass,$url_from);

function get($url) {
    $get = curl_init();
    curl_setopt($get, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($get, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($get, CURLOPT_URL, $url);
    return curl_exec ($get);
    curl_close ($get);
}

$html = get($url_get);
echo $html;

Это (более или менее) тот же сценарий, который работал на двух других сайтах, иудается войти в систему в порядке.То, что сбило меня с толку, это коды в $name_pass.Оказывается, сайт назвал поля ввода имени и пароля как login[username] и login[password].Почему, черт возьми, я понятия не имею, но я попытался отправить его как с кодами, так и в скобках, но ничего не помогло.

Live HTTP Headers дает мне следующее для этой страницы:

http://fastorder.newrock.es/store2009/index.php/customer/account/loginPost/

POST /store2009/index.php/customer/account/loginPost/ HTTP/1.1
Host: fastorder.newrock.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://fastorder.newrock.es/store2009/index.php/customer/account/login/
Cookie: frontend=6tjul97q4mvn0046ier0k79li8
Content-Type: application/x-www-form-urlencoded
Content-Length: 81
login%5Busername%5D=*****&login%5Bpassword%5D=*****&send=
HTTP/1.1 302 Found
Date: Fri, 26 Feb 2010 12:29:19 GMT
Server: Apache/2.0.63 (CentOS)
X-Powered-By: PHP/5.2.10
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: http://fastorder.newrock.es/store2009/index.php/customer/account/
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8

Я пытался скопировать все, что мог, в скрипт cURL, думая, что есть какой-то неясный способ заблокировать скрипт для входа в систему. Но сейчас я совершенно застрял и понятия не имею, что делать.делать дальшеИ я перерыл много учебных пособий, и все они дают советы, которые работали как шарм для первых двух сайтов.

Halp?

Ответы [ 3 ]

0 голосов
/ 26 февраля 2010

Предложение: используйте Fiddler (www.fiddler2.com) для определения трафика запроса, CURL против вашего браузера.

0 голосов
/ 26 февраля 2010

Что-то не так с регистрацией / входом в магазин. В электронном письме для активации сказано просто войти в систему, чтобы активировать учетную запись. Я пытался войти в систему несколько раз, но я получаю сообщение об ошибке "Эта учетная запись не активирована". каждый раз, когда я пытаюсь войти в систему.

Ниже приведено быстрое изменение, которое печатает возвращенную страницу входа.

$url_to = 'http://fastorder.newrock.es/store2009/index.php/customer/account/loginPost/';
$url_from = 'http://fastorder.newrock.es/store2009/index.php/customer/account/login/';
$url_get = 'http://fastorder.newrock.es/store2009/index.php/';
$name_pass = 'login%5Busername%5D=*****&login%5Bpassword%5D=*****&send=';

function login($link,$user,$from) {
$fp = fopen("cookie.txt", "w");
fclose($fp);
$log = curl_init();
curl_setopt($log, CURLOPT_REFERER, $from);
curl_setopt($log, CURLOPT_URL, $link);
curl_setopt($log, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($log, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($log, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6");
curl_setopt($log, CURLOPT_TIMEOUT, 40);
curl_setopt($log, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($log, CURLOPT_HEADER, TRUE);
curl_setopt($log, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($log, CURLOPT_POST, TRUE);      
curl_setopt($log, CURLOPT_POSTFIELDS, $user);
$data = curl_exec($log);
curl_close($log);
return $data;
}

echo login($url_to,$name_pass,$url_from);

function get($url) {
$get = curl_init();
curl_setopt($get, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($get, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($get, CURLOPT_URL, $url);
return curl_exec ($get);
curl_close ($get);
}

$html = get($url_get);
echo $html;

Edit:
Данные куки записываются в файл куки (cookie.txt)? Если нет ...

  1. Проверьте права доступа к файлу, убедитесь, что он доступен для записи.

  2. Ошибка в более ранних версиях php5 приводила к игнорированию опции файла cookie.

Подробности об ошибке здесь: http://bugs.php.net/bug.php?id=33475
Решение: добавить unset ($ log) после curl_close ($ log);

Трудно отлаживать этот скрипт без возможности его тестирования.

0 голосов
/ 26 февраля 2010

Может быть так:

login%5Busername%5D=*****&login%5Bpassword%5D=*****&send=

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

Я бы делал локальные тесты с помощью curl и такого рода форм входа в систему. Может быть, вы можете отладить, что не так оттуда. Если я прав, там будут пустые поля.

...