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

Andrew Kopeyko kaa на zvuki.ru
Пн Апр 27 23:32:15 PDT 2009


Доброе утро, всезнающий 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