The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package HTTP::SimpleLinkChecker;
use strict;

use warnings;
no warnings;

use Exporter qw(import);

use vars qw($ERROR $VERSION @EXPORT_OK);

use Mojo::UserAgent;

@EXPORT_OK = qw(check_link);

my $UA = Mojo::UserAgent->new();
$UA->proxy->detect;

$VERSION = '1.164';

sub check_link {
	my $link = shift;
	unless( defined $link ) {
		$ERROR = 'Received no argument';
		return;
		}

	my $transaction = $UA->head($link);
	my $response = $transaction->res;

	if( ! $response and $response->code >= 400 ) {
		$transaction = $UA->get($link);
		$response = $transaction->res;
		}

	unless( ref $response ) {
		$ERROR = 'Could not get response';
		return;
		}

	return $response->code;
	}

sub user_agent { $UA }

1;

=encoding utf8

=head1 NAME

HTTP::SimpleLinkChecker - Check the HTTP response code for a link

=head1 SYNOPSIS

	use HTTP::SimpleLinkChecker;

	my $code = HTTP::SimpleLinkChecker::check_link($url);

	unless( defined $code ) {
		print "Error: $HTTP::SimpleLinkChecker::ERROR\n";
		}

=head1 DESCRIPTION

You don't have to know anything about objected-oriented Perl, LWP, or
the HTTP module to be able to check your links. This module is
designed for the casual user. It has one function, C<check_link>, that
returns the HTTP response code that it receives when it tries to fetch
the web address passed to it. The undef value is returned for any
non-HTTP failure and the C<$HTTP::SimpleLinkChecker::ERROR> variable
is set.

The HEAD method is tried first, although if anything other than a good
status code (those less than 400) is received, another request is made
with the GET method. Note, however, that even with the best code, no
module can control how servers decide to respond to a check, or
control any of the myriad things that can go wrong with the network
between you and the remote server. Some may filter requests based on
origin IP address, user-agent type, or any other arbitrary factor.
Some servers may not respond correctly at all. Furthermore, some
servers might be temporarily down or overloaded. I recommend that you
recheck "broken" links a couple times over a long period (like a day
or two) before you decide they are really broken.

If you are behind a firewall or proxy, this module picks up those
settings through Mojo::UserAgent::Proxy's detect() method.  See
L<Mojo::UserAgent::Proxy> for more details.

=head2 Functions

=over 4

=item check_link( URL )

Returns the HTTP response code for URL.

=item user_agent

Returns a reference to the Mojo::UserAgent object.  You
can affect it directly.  See L<Mojo::UserAgent>.

	my $ua = HTTP::SimpleLinkChecker::user_agent();
	$ua->transactor->name( 'Mozilla 19.2' );

=back

=head1 SOURCE AVAILABILITY

This source is in Github:

	http://github.com/briandfoy/http-simplelinkchecker

If, for some reason, I disappear from the world, one of the other
members of the project can shepherd this module appropriately.

=head1 AUTHOR

brian d foy, C<< <bdfoy@cpan.org> >>

=head2 Contributors

=over 4

=item * Sebastian Paaske Tørholm, C<< <Eckankar@gmail.com> >>

=back

=head1 COPYRIGHT AND LICENSE

Copyright © 2004-2016, brian d foy <bdfoy@cpan.org>. All rights reserved.

This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut