1 package OpenILS::Utils::HTTPClient;
6 use OpenSRF::Utils::SettingsClient;
7 use OpenSRF::Utils::Logger qw($logger);
8 use OpenSRF::Utils::JSON;
26 # pull settings from opensrf.xml config
27 my $conf = OpenSRF::Utils::SettingsClient->new();
28 my $settings = $conf->config_value('http_client');
30 if ($settings->{useragent}) {
31 $self->{useragent} = $settings->{useragent};
33 if ($settings->{default_timeout}) {
34 $self->{default_timeout} = $settings->{default_timeout};
37 # SSL handling options. When communicating over HTTPS, LWP::UserAgent
38 # falls back to the environment variables whose values are set here.
39 # See LWP::UserAgent docs for details.
40 foreach my $opt (keys %{$settings->{ssl_opts}}) {
41 # check for a valid SSL cert?
42 if ($opt eq 'verify_hostname') {
43 $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = $settings->{ssl_opts}->{verify_hostname};
44 # path to directory for CA certificate files
45 } elsif ($opt eq 'SSL_ca_path') {
46 $ENV{PERL_LWP_SSL_CA_PATH} = $settings->{ssl_opts}->{SSL_ca_path};
47 # path to CA certificate file
48 } elsif ($opt eq 'SSL_ca_file') {
49 $ENV{PERL_LWP_SSL_CA_FILE} = $settings->{ssl_opts}->{SSL_ca_file};
56 # request(): Send an HTTP request.
59 # $method - HTTP method (GET, POST, PUT, DELETE)
60 # $uri - URI of resource to be requested
61 # $header - hashref containing HTTP headers
62 # $content - content of request
63 # $request_timeout - timeout value in seconds; defaults to 60s
64 # $useragent - user agent string; defaults to SameOrigin/1.0
66 # Returns an HTTP::Response object, or undef if the request failed/timed out.
67 # Use $res->content to get response content.
70 my ($self, $method, $uri, $headers, $content, $request_timeout, $useragent, $do_not_redirect) = @_;
71 my $ua = new LWP::UserAgent;
73 $request_timeout = $request_timeout || $self->{default_timeout} || 60;
74 $ua->timeout($request_timeout);
76 $useragent = $useragent || $self->{useragent} || 'SameOrigin/1.0';
77 $ua->agent($useragent);
78 if ($do_not_redirect) {
79 $ua->requests_redirectable([]);
82 my $h = HTTP::Headers->new();
83 foreach my $k (keys %$headers) {
84 $h->header($k => $headers->{$k});
87 my $req = HTTP::Request->new(
96 $logger->info("HTTPClient: sending HTTP $method request to $uri");
97 $res = $ua->request($req);
99 $logger->info("HTTPClient: execution error");
103 if ($res->status_line =~ /timeout/) {
104 $logger->info("HTTPClient: timeout error: " . $res->status_line);
108 # TODO handle HTTP response status codes
113 # Wrappers for request() using specific HTTP methods (GET, POST etc).
116 return $self->request('GET', @_);
121 return $self->request('POST', @_);
126 return $self->request('PUT', @_);
131 return $self->request('DELETE', @_);