[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