Включение сохранения cookie-файлов пула запросов pecl_http - PullRequest
0 голосов
/ 16 июня 2011

Я пытаюсь включить сохранение файлов cookie для отправленных объектов pecl_http HttpRequest, отправленных с использованием того же объекта HttpRequestPool (если это имеет значение); К сожалению, документации довольно мало, и, несмотря на все мои попытки, я не думаю, что все работает должным образом.

Я пробовал использовать HttpRequestDataShare (хотя документация здесь очень недостаточна) и использовать опцию запроса «cookietore», чтобы указать на файл. Я до сих пор не вижу куки, отправленные обратно на сервер (ы) в последовательных запросах.

Для ясности, под "постоянством файлов cookie" я подразумеваю, что файлы cookie, установленные сервером, автоматически сохраняются и повторно отправляются pecl_http при последовательных запросах, без необходимости обрабатывать их вручную (если это произойдет, я буду, но Я надеюсь, что я не должен это делать).

Может ли кто-нибудь указать мне на пример работающего кода или приложение, которое отправляет несколько объектов HttpRequest на один и тот же сервер и использует постоянство файлов cookie pecl_http?

Спасибо!

1 Ответ

0 голосов
/ 16 июня 2011

Имейте в виду, что пул запросов пытается отправить все запросы параллельно, поэтому они, конечно, не могут знать, что файлы cookie еще не получены.Например:

<?php

$url = "http://dev.iworks.at/ext-http/.cookie.php";

function cc($a) { return array_map("current", array_map("current", $a)); }

$single_req = new HttpRequest($url);

printf("1st single request cookies:\n");
$single_req->send();
print_r(cc($single_req->getResponseCookies()));

printf("waiting 1 second...\n");
sleep(1);

printf("2nd single request cookies:\n");
$single_req->send();
print_r(cc($single_req->getResponseCookies()));

printf("1st pooled request cookies:\n");
$pooled_req = new HttpRequestPool(new HttpRequest($url), new HttpRequest($url));
$pooled_req->send();
foreach ($pooled_req as $req) {
    print_r(cc($req->getResponseCookies()));
}

printf("waiting 1 second...\n");
sleep(1);

printf("2nd pooled request cookies:\n");
$pooled_req = new HttpRequestPool(new HttpRequest($url), new HttpRequest($url));
$pooled_req->send();
foreach ($pooled_req as $req) {
    print_r(cc($req->getResponseCookies()));
}

printf("waiting 1 second...\n");
sleep(1);

printf("now creating a request datashare\n");
$pooled_req = new HttpRequestPool(new HttpRequest($url), new HttpRequest($url));
$s = new HttpRequestDataShare();
$s->cookie = true;
foreach ($pooled_req as $req) {
    $s->attach($req);
}

printf("1st pooled request cookies:\n");
$pooled_req->send();
foreach ($pooled_req as $req) {
    print_r(cc($req->getResponseCookies()));
}

printf("waiting 1 second...\n");
sleep(1);

printf("2nd pooled request cookies:\n");
$pooled_req->send();
foreach ($pooled_req as $req) {
    print_r(cc($req->getResponseCookies()));
}
...