The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use HTTP::GHTTP;
use Getopt::Long;
$|=1;
use strict;
use vars qw/$VERSION/;

$VERSION = '1.0';

my @getopt_args = qw(
        p=s  P   H=s@   u   U
        s    e      d   v
        h    V
        );

my %options;

Getopt::Long::config("noignorecase", "bundling");
unless (GetOptions(\%options, @getopt_args)) {
    usage();
}

if ($options{V}) {
    print <<EOT;
This is g-request version $VERSION

Copyright 2000, AxKit.com Ltd

EOT
}

usage() if $options{h} || !@ARGV;

$options{u} = 1 if $options{U};

unless($options{P}) {
    $options{p} ||= $ENV{http_proxy};
}

my $r = HTTP::GHTTP->new();

$r->set_header(Connection => 'close');

for my $extra_header (@{ $options{H} || [] }) {
    my ($name, $value) = split /:\s*/, $extra_header, 2;
    $r->set_header($name, $value);
}

$r->set_proxy($ENV{http_proxy}) if $ENV{http_proxy} && !$options{P};
$r->set_proxy($options{p}) if $options{p};

my $URI = shift @ARGV;

$r->set_uri($URI);

$r->process_request();

if ($options{e}) {
    eval {
        my @headers = $r->get_headers;
        print join("\n", map { "$_: " . $r->get_header($_) } @headers), "\n\n";
    };
    if ($@) {
        warn $@, "\n", "get_headers (and thus -e) only available in libghttp 1.08 and higher";
    }
}

unless ($options{d}) {
    print $r->get_body();
}

sub usage {
    print <<EOT;
Usage: g-request [-options] <url>
    -p <proxy>    Use this as a proxy server
    -P            Don't pick up proxy settings from environment
    -H <header>   Send this HTTP header (you can specify several)
    -u            Display method and URL before any response
    -U            Display request headers (implies -u)
    -s            Display response status code
    -e            Display response headers
    -d            Do not display content
    -v            Be verbose
    -h            Print this help message
    -V            Show program version
EOT
    exit; #'
}

exit(0);