Reputation: 51
The network guys at my work are applying upgrades and patches that sometimes cause my LWP to error out with http status 500.
I have about 50 Perl apps with the below line of code. Instead of changing all 50 apps each time security protocols change, I'd like to use a variable. However, I can't seem to hit on the right way to assign the LWP to a variable.
Current code that works:
my $ua = LWP::UserAgent->new(ssl_opts =>{ verify_hostname => 0 });
Want to do this, but keep getting errors:
my $lwp = "LWP::UserAgent->new(ssl_opts =>{ verify_hostname => 0 })";
my $ua = $lwp;
I plan to put the lwp string in a file or a module, but coded the above for illustrative purposes.
Any advice on how to do this is greatly appreciated.
Tried these, but they did not work:
my $ua = <$LWP>;
my $ua = eval "\$$LWP";
my $ua = ${$LWP}; `
Upvotes: 0
Views: 102
Reputation: 69224
If you look at the documentation for LWP, you'll see that it recognises an environment variable called PERL_LWP_SSL_VERIFY_HOSTNAME
to set the default value for verify_hostname
.
So you could just remove the verify_hostname
option from all of your calls to LWP::UserAgent->new()
and arrange to have the environment variable set correctly before running your application.
Upvotes: 2
Reputation: 8506
I wouldn't go with any eval
based approach. The code you eval
is a String, so you won't get syntax highlighting in your editor, you cannot run perl -c
to check it, and there is just no point to eval
.
A simpler approach would be to just define a function in a module, e.g., UserAgentMaker.pm
that you can use
and call:
package UserAgentMaker;
use strict;
use warnings;
use LWP::UserAgent;
sub get_lwp {
return LWP::UserAgent->new(ssl_opts =>{ verify_hostname => 0 });
}
1;
Then use it:
use strict;
use warnings;
use UserAgentMaker;
my $ua = UserAgentMaker::get_lwp();
# use $ua
You can also extend this and create different get_lwp
functions if clients need to create them with different options, like a get_legacy_lwp
, get get_tls_1_1_lwp
and whatever else you need.
You may need to pass -I
to perl
so that Perl finds your module. For example, if both are in the same directory:
perl -I. example.pl
Upvotes: 6