Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

LWP not working with HTTPS protocol (SOLVED)

by CountZero (Bishop)
on May 02, 2015 at 22:08 UTC ( [id://1125466]=perlquestion: print w/replies, xml ) Need Help??

CountZero has asked for the wisdom of the Perl Monks concerning the following question:

Brothers & Sisters in Perl,

I was writing some code to access my Flickr account, when I happened to have to access a resource over an SSL connection (https-protocol).

Much to my surprise, LWP failed to access this resource and gave me a most strange error:

Can't connect to api.flickr.com:443 Bad file descriptor at d:/Perl/perl/site/lib/LWP/Protocol/http.pm line + 41.
The code I used was a very simple
my $ua = LWP::UserAgent->new; my $req = HTTP::Request->new( GET => 'https://api.flickr.com/services/ +rest'); my $response = $ua->request($req);
Note that LWP makes the connection if I change 'https' by 'http'. Of course the webserver then refuses to return the requested resource as it requires an SSL connection.

Note also that the error message refers to the LWP::Protocol::http-module, rather than the LWP::Protocol::https-module, as one should expect.

Both modules are installed and up-to-date. Net::SSL is also installed and up-to-date (version 2.86).

I am running Strawberry Perl 18.2 on a Windows 8.1 machine.

Anyone any ideas how to make this work?

Update: Adding the ssl_opts and protocols_allowed parameters solved the problem. Thanks all!

CountZero

A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

My blog: Imperial Deltronics

Replies are listed 'Best First'.
Re: LWP not working with HTTPS protocol
by LanX (Saint) on May 02, 2015 at 22:27 UTC
Re: LWP not working with HTTPS protocol
by hippo (Bishop) on May 03, 2015 at 10:33 UTC

    The following complete code works fine for me:

    use strict; use warnings; use LWP::UserAgent; use HTTP::Request; my $ua = LWP::UserAgent->new; my $req = HTTP::Request->new( GET => 'https://api.flickr.com/services/ +rest'); my $response = $ua->request($req); print $response->code . "\n";

    And gives the expected "200" as output. LWP::UserAgent 6.02, HTTP::Request 6.00, LWP::Protocol::https 6.02, Mozilla::CA 20110914, perl 5.14.3 on Linux. Hope this is useful.

Re: LWP not working with HTTPS protocol
by Khen1950fx (Canon) on May 03, 2015 at 04:00 UTC

    Just FYI, I've noticed that the first test of LWP::Protocol::https fails because sometimes, when it tries to connect to the Apache Software Foundation, it connects ok; sometimes, it can't make a connection. For example, I installed it on 5.8.8 with no problems. A couple of hours later, I tried it on 5.16.0, but it couldn't connect. It seems the site is up and down frequently.

    The modules are installed, so they should just work. I think that LWP needs to be told to do https, at least in this situation:
    #!/usr/bin/perl -l use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0 }, protocols_allowed => ['https'], ); my $req = HTTP::Request->new( GET => 'https://api.flickr.com/services/rest', ); my $res = $ua->request($req); print $res->code;

      Please don't disable hostname validation, at least not with any code used in production. This makes you vulnerable to man-in-the-middle attacks.
Re: LWP not working with HTTPS protocol
by Gangabass (Vicar) on May 03, 2015 at 04:10 UTC
    LWP uses IO::Socket::SSL since version 6.0 as the backend SSL library. So you need to update this module.
      The problem still occurs with the latest IO::Socket::SSL (2.016) on Windows 8.1.
      C:\Users\Jason\Development>cpan install IO::Socket::SSL CPAN: Term::ANSIColor loaded ok (v4.03) CPAN: Storable loaded ok (v2.51) Reading 'C:\Perl64\cpan\Metadata' Database was generated on Tue, 21 Jul 2015 05:41:02 GMT CPAN: Module::CoreList loaded ok (v5.20150720) IO::Socket::SSL is up to date (2.016).

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://1125466]
Approved by Discipulus
Front-paged by ww
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2024-04-16 12:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found