|
|
|
| Необходимо авторизироваться на сайте под двумя учетными записями сразу по очереди. вроде ничего сложного.
Инициализирую сеанс cURL в пхп, устанавливаю опции, отпрвавляю данные записываю куки в файл, прохожу location'ы, получаю содержимое. закрываю сеанс. все нормально. после ставлю таймаут sleep(30); к примеру и делаю тоже самое но отправляю другие данные для авторизации и она не прокатывает, в ответе получаю ошибку о неверном логине или пароле.
Логин и пароль верные.
Файлы для кукисов разные. записываются правильно.
Авторизируется на сервере только первая отправленая учетная запись, вторая нет. пробовал менять порядок.
user-agent разный для аккаунтов.
Привязки к IP нету.
Руками авторизиироваться на двух аккаунтах одновременно получается.
Пример:
<?php
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, $step1);
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch1, CURLOPT_COOKIEJAR, $cookie_file1);
curl_setopt($ch1, CURLOPT_COOKIEFILE, $cookie_file1);
curl_setopt($ch1, CURLOPT_USERAGENT, $user_agent1);
curl_setopt($ch1, CURLOPT_POSTFIELDS, $auth_string1);
curl_setopt($ch1, CURLOPT_POST, 1);
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch1);
curl_close($ch1);
sleep(30);
// тоже самое для авторизации под другой учетной записью.
$ch2 = curl_init();
...
?>
|
Если код разбить на два файла, то все работает правильно. т.е. первый авторизирует один аккаунт, второй соотвественно другой аккаунт.
Скажите пожалуйста, в чем может быть проблема. Спасибо. | |
|
|
|
|
|
|
|
для: egoss
(30.10.2008 в 21:42)
| | Всю ночь искал информацию. нашел пример использования недокументированных (на сколько мне известно) функций cURL для синхронного выполнения запросов.
http://blog.termit.name/sinxronnye-http-zaprosy-v-php-ispolzuya-curl/
Сделал по аналогии, всеравно авторизацию успешно проходит только один аккаунт.
Заметил, что при использовании последнего способа, cookie не записались в файл, и при етом один аккаунт, пройдя через два location'a, выдал мне страницу успешной авторизации.
Предпологаю:
Что cookie всетаки были отправлены.
И еще предположение, что ошибка о неверноем логине или пароле, при попытке авторизироваться на втором по счету аккаунте, происходит опять же изза cookie, т.е. сервер получает cookie от одной учетной записи, а я посылаю реквизиты для другой.
Судя по информации с википедии http://ru.wikipedia.org/wiki/Сокет_(программный_интерфейс)
и успешной работе скрипта, при условии 1 авторизация - 1 процесс
Дело может быть в сокете который создает cURL, curl_close не решает ету проблему. есть другие способы не прерывая выполнение скрипта отчистить сокет? если ето так.
Задача скрипта такая, нужно пройтись по некоторым страницам сайта под разными учетными записями, собрать нужную информацию и выйти. И два условия
1. прохожить по сайту нужно оченьл часто
2. необходим таймаут в районе 30 секунд
Чтобы не запускать несколько процессов, хотелось бы реализовать все в одном, пока первая учетная запись на таймауте (таймаут высчитывается из количества аккаунтов и времени выполнения 1 прохода по сайту), выполняется проход с другой учетной записи, все в цикле.
Етот вариант экономит ресурсы и время.
Может быть есть более удобное решение для данной задачи? Кто что думает по етому поводу?
PS
Авторизация на одном сервере в пределах одного домена.
Код в самом верху без цикла, для наглядности, его тоже проверял.
Думал о решении на сокетах, на практике получается очень не удобно, так что желательно всеже cURL. | |
|
|
|