[Moscow.pm] подскажите по WWW::Curl::Easy

Alex Shatlovsky shatlovsky на gmail.com
Вт Апр 28 00:37:52 PDT 2009


Привет,

2009/4/28 Анатолий Шарифулин <sharifulin на gmail.com>:
> Так вы длину не пишите.
> Используйте HTTP::Request::Common, он за вас длину посчитает и тип пропишет
> верный и правильный запрос построит. Перед отправкой as_string  покажет весь
> запрос.

Заголовки все равно не все возвращаются:

$ ./ua.t
# Will access HTTP server at http://srv:55605/
# URL constructed: http://srv:55605/obj
From requestor's view:
POST http://srv:55605/obj
Content-Length: 10
Content-Type: application/x-www-form-urlencoded

domain=qqq
====================
From respondent's view

POST /obj HTTP/1.1
Connection: TE, close
Host: srv:55605
TE: deflate,gzip;q=0.3
User-Agent: libwww-perl/5.805
Content-Length: 10
Content-Type: application/x-www-form-urlencoded

domain=qqq
====================
# URL constructed: http://srv:55605/quit
Terminate HTTP server


--


>
> 2009/4/28 Andrew Kopeyko <kaa на zvuki.ru>
>>
>> Доброе утро, всезнающий all!
>>
>> Есть задача - нужно видеть (логировать) все заголовки отправляемого мною
>> POST-запроса.
>>
>> Запрос формируется перлом, соответственно начал (по привычке) на LWP, но
>> довольно быстро обломался - до всех заголовков реального запроса не
>> дотягивается даже $request->as_string;
>>
>> Вот кусочек кода:
>> --->8---
>> use LWP;
>> use HTTP::Request;
>> my $ua = new LWP::UserAgent;
>> my $request = HTTP::Request->new(POST => $URL);
>> $request->content_type('application/x-www-form-urlencoded');
>> my $content = "domain=qqq";
>> $request->content($content);
>> $Cookies->add_cookie_header( $request );
>> $ua->prepare_request( $request );
>> &debug("POSTing $URL ...");
>> &debug("request_headers:");
>> foreach my $hdr ($ua->default_headers->header_field_names) {
>>    print "  ".$hdr.": ".$ua->default_headers->header($hdr)."\n";
>> }
>> print $request->as_string();
>> --->8---
>>
>> А вот его output:
>> --->8---
>> DEBUG: POSTing https://www.nic.ru/cgi/na.cgi ...
>> DEBUG: request_headers:
>>  Accept: text/html, text/plain
>>  Accept-Charset: koi8-r
>>  Accept-Language: ru,en
>>  Referer: http://www.nic.ru/
>>  User-Agent: Mozilla/4.72 [en] (X11; U; FreeBSD 4.2-BETA i386)
>>
>> POST https://www.nic.ru/cgi/na.cgi
>> Accept: text/html, text/plain
>> Accept-Charset: koi8-r
>> Accept-Language: ru,en
>> Referer: http://www.nic.ru/
>> User-Agent: libwww-perl/5.805
>>
>> domain=qqq
>>
>> --->8---
>>
>> Видно, что в выводе отсутствуют
>> - установленный Content-Type
>> - вычисленный Content-Length
>>
>>
>> Дело осложняется тем, что запрос идёт на https:// - т.е. on-wire
>> (tcpdump\ethereal) не подсмотреть...
>>
>> Каждый раз пробовать на отдельном специальном http-сервере - не дело: мне
>> нужно будет логировать заголовки "боевого" POST-запроса.
>>
>>
>> Сейчас смотрю в сторону WWW::Curl::Easy. Судя по документации, есть
>> возможность посмотреть заголовки запроса - через установку опции
>> CURLOPT_DEBUGFUNCTION с типом CURLINFO_HEADER_OUT
>> http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTDEBUGFUNCTION
>>
>> Но вот как именно это делается - пока непонятно. Ибо перлового примера -
>> не нагуглилось...
>>
>> Нашёл только Cи-шный пример:
>>  http://curl.haxx.se/lxr/source/docs/examples/debug.c
>> но моих знаний C и Perl - недостаточно чтобы построить перловый аналог
>> функции my_trace. Увы...
>>
>>
>> Вот и прошу "помощи зала" - может, кто из вас хорошо знаком с cURL ?
>>
>> Пожалуйста, подскажите
>> - как работать с CURLOPT_DEBUGFUNCTION ?
>> - как логировать заголовки отправляемого POST-запроса ?
>>
>>
>>
>> --
>> Best regards,
>> Andrew Kopeyko <kaa на zvuki.ru>
>>
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>
>
>
> --
> С уважением,
> Анатолий Шарифулин.
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>



-- 
С уважением,
А.Н.Шатловский


Подробная информация о списке рассылки Moscow-pm