Привет, 2009/4/28 Анатолий Шарифулин <[email protected]>: > Так вы длину не пишите. > Используйте 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 <[email protected]> >> >> Доброе утро, всезнающий 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 <[email protected]> >> >> -- >> Moscow.pm mailing list >> [email protected] | http://moscow.pm.org > > > > -- > С уважением, > Анатолий Шарифулин. > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > > -- С уважением, А.Н.Шатловский -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
