114 lines
2.6 KiB
Plaintext
114 lines
2.6 KiB
Plaintext
|
#!/usr/bin/perl
|
||
|
|
||
|
use strict;
|
||
|
use warnings;
|
||
|
use LWP::UserAgent ();
|
||
|
use Getopt::Long qw(GetOptions);
|
||
|
use Encode;
|
||
|
use Encode::Locale;
|
||
|
|
||
|
GetOptions(\my %opt, 'parse-head', 'max-length=n', 'keep-client-headers',
|
||
|
'method=s', 'agent=s', 'request',)
|
||
|
|| usage();
|
||
|
|
||
|
my $url = shift || usage();
|
||
|
@ARGV && usage();
|
||
|
|
||
|
sub usage {
|
||
|
(my $progname = $0) =~ s,.*/,,;
|
||
|
die <<"EOT";
|
||
|
Usage: $progname [options] <url>
|
||
|
|
||
|
Recognized options are:
|
||
|
--agent <str>
|
||
|
--keep-client-headers
|
||
|
--max-length <n>
|
||
|
--method <str>
|
||
|
--parse-head
|
||
|
--request
|
||
|
|
||
|
EOT
|
||
|
}
|
||
|
|
||
|
my $ua = LWP::UserAgent->new(
|
||
|
parse_head => $opt{'parse-head'} || 0,
|
||
|
keep_alive => 1,
|
||
|
env_proxy => 1,
|
||
|
agent => $opt{agent} || "lwp-dump/$LWP::UserAgent::VERSION ",
|
||
|
);
|
||
|
|
||
|
my $req = HTTP::Request->new($opt{method} || 'GET' => decode(locale => $url));
|
||
|
my $res = $ua->simple_request($req);
|
||
|
$res->remove_header(grep /^Client-/, $res->header_field_names)
|
||
|
unless $opt{'keep-client-headers'}
|
||
|
or ($res->header("Client-Warning") || "") eq "Internal response";
|
||
|
|
||
|
if ($opt{request}) {
|
||
|
$res->request->dump;
|
||
|
print "\n";
|
||
|
}
|
||
|
|
||
|
$res->dump(maxlength => $opt{'max-length'});
|
||
|
|
||
|
__END__
|
||
|
|
||
|
=head1 NAME
|
||
|
|
||
|
lwp-dump - See what headers and content is returned for a URL
|
||
|
|
||
|
=head1 SYNOPSIS
|
||
|
|
||
|
B<lwp-dump> [ I<options> ] I<URL>
|
||
|
|
||
|
=head1 DESCRIPTION
|
||
|
|
||
|
The B<lwp-dump> program will get the resource identified by the URL and then
|
||
|
dump the response object to STDOUT. This will display the headers returned and
|
||
|
the initial part of the content, escaped so that it's safe to display even
|
||
|
binary content. The escapes syntax used is the same as for Perl's double
|
||
|
quoted strings. If there is no content the string "(no content)" is shown in
|
||
|
its place.
|
||
|
|
||
|
The following options are recognized:
|
||
|
|
||
|
=over
|
||
|
|
||
|
=item B<--agent> I<string>
|
||
|
|
||
|
Override the user agent string passed to the server.
|
||
|
|
||
|
=item B<--keep-client-headers>
|
||
|
|
||
|
LWP internally generate various C<Client-*> headers that are stripped by
|
||
|
B<lwp-dump> in order to show the headers exactly as the server provided them.
|
||
|
This option will suppress this.
|
||
|
|
||
|
=item B<--max-length> I<n>
|
||
|
|
||
|
How much of the content to show. The default is 512. Set this
|
||
|
to 0 for unlimited.
|
||
|
|
||
|
If the content is longer then the string is chopped at the
|
||
|
limit and the string "...\n(### more bytes not shown)"
|
||
|
appended.
|
||
|
|
||
|
=item B<--method> I<string>
|
||
|
|
||
|
Use the given method for the request instead of the default "GET".
|
||
|
|
||
|
=item B<--parse-head>
|
||
|
|
||
|
By default B<lwp-dump> will not try to initialize headers by looking at the
|
||
|
head section of HTML documents. This option enables this. This corresponds to
|
||
|
L<LWP::UserAgent/"parse_head">.
|
||
|
|
||
|
=item B<--request>
|
||
|
|
||
|
Also dump the request sent.
|
||
|
|
||
|
=back
|
||
|
|
||
|
=head1 SEE ALSO
|
||
|
|
||
|
L<lwp-request>, L<LWP>, L<HTTP::Message/"dump">
|