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;
$UA->max_redirects(3);

$VERSION = '1.165';

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.

The user-agent will automatically handle redirects. If you don't like
that, you can change the user agent settings before you start:

	HTTP::SimpleLinkChecker::user_agent()->max_redirects(0);

The user agent is L<Mojo::UserAgent>, so anything you do with that
module you can do with the user agent.

Note 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 L<Mojo::UserAgent::Proxy>'s C<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