Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: PHP cURL Cookie проблема с авторизацией под двумя учетными записями, на одном сервере
 
 автор: egoss   (30.10.2008 в 21:42)   письмо автору
 
 

Необходимо авторизироваться на сайте под двумя учетными записями сразу по очереди. вроде ничего сложного.

Инициализирую сеанс cURL в пхп, устанавливаю опции, отпрвавляю данные записываю куки в файл, прохожу location'ы, получаю содержимое. закрываю сеанс. все нормально. после ставлю таймаут sleep(30); к примеру и делаю тоже самое но отправляю другие данные для авторизации и она не прокатывает, в ответе получаю ошибку о неверном логине или пароле.

Логин и пароль верные.
Файлы для кукисов разные. записываются правильно.
Авторизируется на сервере только первая отправленая учетная запись, вторая нет. пробовал менять порядок.
user-agent разный для аккаунтов.
Привязки к IP нету.
Руками авторизиироваться на двух аккаунтах одновременно получается.

Пример:

<?php
    $ch1 
curl_init();
    
curl_setopt($ch1CURLOPT_URL$step1);
    
curl_setopt($ch1CURLOPT_HEADER0); 
    
curl_setopt($ch1CURLOPT_COOKIEJAR$cookie_file1); 
    
curl_setopt($ch1CURLOPT_COOKIEFILE$cookie_file1); 
    
curl_setopt($ch1CURLOPT_USERAGENT$user_agent1);
    
curl_setopt($ch1CURLOPT_POSTFIELDS$auth_string1);
    
curl_setopt($ch1CURLOPT_POST1);
    
curl_setopt($ch1CURLOPT_FOLLOWLOCATION0);
    
curl_setopt($ch1CURLOPT_RETURNTRANSFER1); 
             
curl_exec($ch1);
             
curl_close($ch1);

sleep(30);

// тоже самое для авторизации под другой учетной записью.
$ch2 curl_init();
...
?>


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

  Ответить  
 
 автор: egoss   (31.10.2008 в 13:34)   письмо автору
 
   для: 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.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования