Проблема с сохранением куков в CURL

12 3
[Удален]
2344

Написал функцию для отправления POST форм с помощью CULR:

function sendPostDataCURL($url,$postData="",$cookiestr="",$cookiejar="",$cookiefile="")  //from http://parsing-and-i.blogspot.com/2009/09/curl-first-steps.html

{ $uagent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8";

$ch = curl_init( $url );

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает веб-страницу
curl_setopt($ch, CURLOPT_HEADER, 1); // возвращает заголовки
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходит по редиректам
curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки
curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 120); // таймаут ответа
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // останавливаться после 10-ого редиректа


$str = '';

foreach ($postData as $key => $val) {
$str .= '&' . $key . '=' . $val;
}

$postData = substr_replace($str, '', 0, 1);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$postData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));

if(strcmp($cookiejar,"")!=0){
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiejar);
}
if(strcmp($cookiefile,"")!=0){
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
}
if(strcmp($cookiestr,"")!=0){
curl_setopt($ch, CURLOPT_COOKIE, $cookiestr);
}

$content = curl_exec( $ch );

curl_close( $ch );

return $content;

}

В $cookiejar и $cookiefile передаю один и тот же параметр, который является путем на сервере к файлу куков. Формирую его следующим образом:

dirname(__FILE__).DIRECTORY_SEPARATOR.'cookie.txt'; (на денвере выглядит вот так: Z:\home\test1.ru\www\KAautoblogs\cookie.txt

Еще до начала скрипта создаю в папке (в которой выполняется скрипт) пустой файл cookie.txt. Если тестирую на хосте, то прописываю файлу 777. Насколько я понимаю, при запуске данного скрипта куки должны сохраняться в файл $cookiejar (как описано здесь http://www.php.net/manual/en/function.curl-setopt.php). Но этого не происходит (хотя куки на данном конкретном сайте, куда я отправляю форму - устаналвиваются - я проверял в браузере). Буду признателен, если подскажите в чем проблема?

p.s. искал решения подобной проблемы в таких источниках:

http://blog.alexkrylov.ru/post100164771/#BlCom515680850

http://community.livejournal.com/ru_php/1372826.html

p.p.s. еще вопросик - а обязательно для работы с куками устанавливать curl_setopt($ch, CURLOPT_HEADER, 1); ? (то есть обязательно ли возвращать заголовки?)

ewg777
На сайте с 04.06.2007
Offline
225
#1

DudeCurl

strcmp($cookiestr,"")!=0
!empty($var)
[Удален]
#2
ewg777:
DudeCurl
!empty($var)

а есть вариант без DudeCurl? Просто, я читал что у некоторых это получается обычными средствами curla.

[Удален]
#3
plamar:
а есть вариант без DudeCurl? Просто, я читал что у некоторых это получается обычными средствами curla.

а чем дудкурл не нравится? :)

он много что дает, ничего не беря взамен

bearman добавил 11.01.2010 в 13:00

ну дудкурл тоже ничего сверхъестественного не делает, там все прозрачно, и куки тоже

malls
На сайте с 08.08.2005
Offline
255
#4

Вот эти то танцы зачем:

if(strcmp($cookiejar,"")!=0){

просто:

if($cookie)

религия не позволяет?

plamar:
В $cookiejar и $cookiefile передаю один и тот же параметр, который является путем на сервере к файлу куков.

Вот это правильно - больше переменных - круче скрипт!

plamar:
Еще до начала скрипта создаю в папке (в которой выполняется скрипт) пустой файл cookie.txt.

Не надо - он сам создается...

plamar:
p.p.s. еще вопросик - а обязательно для работы с куками устанавливать curl_setopt($ch, CURLOPT_HEADER, 1); ? (то есть обязательно ли возвращать заголовки?)

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

bearman:
а чем дудкурл не нравится? :)

FW? :)

А кстати что он дает? Новые космические технологии используются там? (Т.е. не CURL?)

[Удален]
#5
plamar:
а есть вариант без DudeCurl? Просто, я читал что у некоторых это получается обычными средствами curla.

вопрос остался.

[Удален]
#6
malls:
Вот эти то танцы зачем:

просто:

религия не позволяет?


Вот это правильно - больше переменных - круче скрипт!


Не надо - он сам создается...


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

это все понятно, но проблему не решает

[Удален]
#7
plamar:
вопрос остался.

есть - читать мануал, а не функции всяких "чудаков" из гугла.

malls
На сайте с 08.08.2005
Offline
255
#8
plamar:
это все понятно, но проблему не решает

Ну а если без всяких этих вот распальцовок в духе: dirname(__FILE__).DIRECTORY_SEPARATOR.'cookie.txt';

Просто, по деревенски написать: cookie.txt

То чего скрипт вообще выдает то (и что при этом в куках остается)?

И кстати вот это зачем: CURLOPT_COOKIE - это доп куки пишет в запрос... Их еще надо уметь составить...

malls добавил 11.01.2010 в 13:16

bearman:
есть - читать мануал, а не функции всяких "чудаков" из гугла.

Бир да иногда можно еще просто разные варианты попробовать. Методом тыка, я слышал, даже демографические проблемы решают, чего уж там CURL...

(хотя конечно с сразу на форум писать - это моднее!) ;)

[Удален]
#9
malls:
Ну а если без всяких этих вот распальцовок в духе: dirname(__FILE__).DIRECTORY_SEPARATOR.'cookie.txt';

Просто, по деревенски написать: cookie.txt

То чего скрипт вообще выдает то (и что при этом в куках остается)?

И кстати вот это зачем: CURLOPT_COOKIE - это доп куки пишет в запрос... Их еще надо уметь составить...

malls добавил 11.01.2010 в 13:16

Бир да иногда можно еще просто разные варианты попробовать (хотя конечно с сразу на форум писать - это моднее!) ;)

даже если просто по деревенски написать cookie.txt, то происходит аналогичная ситуация - файл с кукисами либо пуст, либо (если его не создавать изначально) он и не появляется.

Что касается разных вариантов, то я уже целое утро их пробую))

КСТАТИ, формы для передачи заполняются вот на этой страничке:

http://en.wordpress.com/signup/ , а отправляются на http://en.wordpress.com/signup/?blog=1

malls
На сайте с 08.08.2005
Offline
255
#10
plamar:
даже если просто по деревенски написать cookie.txt, то происходит аналогичная ситуация - файл с кукисами либо пуст, либо (если его не создавать изначально) он и не появляется.

Что касается разных вариантов, то я уже целое утро их пробую))

Так может их и нет куков? Или есть мода ставить их через JS - тут курл не помошник...

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий