#!perl
# simple test script which uses the Perl5 libcurl bindings.
# http://niels.penneman.org/wordpress/category/coding-scripting/perl/
# use option -q to get output only.

use WWW::Curl::Easy;
use Getopt::Std;
use strict;
use vars qw/$opt_q/;

getopts('q');

my $url = $ARGV[0] || 'http://dyndns.itex.at/getip';

sub curl_write_callback {
  my ( $data, $pointer ) = @_;
  ${$pointer} .= $data;
  return length($data);
}

if (!$opt_q) {
  print "Perl Version: $]\n";
  my $mtime = (stat('/system/perl.nlm'))[9] if ($^O eq 'NetWare');
  my $mtime = (stat('c:/perl/bin/perl.exe'))[9] if ($^O eq 'MSWin32');
  my $mtime = (stat('/usr/bin/perl'))[9] if ($^O eq 'linux');
  print "Binary Fdate: ",scalar localtime($mtime),"\n";
  print "OS Name     : $^O\n\n";
  printf ("Curl.pm Version: %s\n", $WWW::Curl::VERSION);
  printf ("Easy.pm Version: %s\n", $WWW::Curl::Easy::VERSION);
  printf ("libcurl Version: %s\n", WWW::Curl::easy::version());
  print ("=" x 78 . "\n");
}

my ( $curl_content, $curl_headers );
my $curl = new WWW::Curl::Easy;
$curl->setopt( CURLOPT_FILE,           \$curl_content );
$curl->setopt( CURLOPT_HEADERFUNCTION, \&curl_write_callback );
$curl->setopt( CURLOPT_URL,            $url );
$curl->setopt( CURLOPT_USERAGENT,      $curl->version() );
$curl->setopt( CURLOPT_WRITEFUNCTION,  \&curl_write_callback );
$curl->setopt( CURLOPT_WRITEHEADER,    \$curl_headers );
$curl->perform;
my $curl_info = $curl->getinfo(CURLINFO_HTTP_CODE);
my $curl_err  = $curl->errbuf;
chomp($curl_content);
chomp($curl_headers);

if ($opt_q) {
  print "$curl_content\n";
} else {
  print "Content:\n========\n$curl_content\n", ("=" x 78 . "\n");
  print "Headers:\n========\n$curl_headers\n", ("=" x 78 . "\n");
  print "Info:\n=====\n$curl_info\n", ("=" x 78 . "\n");
  print "Error:\n======\n$curl_err\n", ("=" x 78 . "\n") if ($curl_err);
}


