Re: Issue with latest version and SSL site

"Markus Moeller" <[email protected]> Fri, 28 Sep 2012 19:16:14 +0100
Newsgroups gmane.comp.lang.perl.modules.lwp
Message-ID <[email protected]>
Hi Shlomi,

Here is a working example. I tried it on Linux and it works. After many try 
and error changes. I found that adding a use Net:SSL (); fixes the problem. 
Which I think means the default IO::Socket::SSL does not (if Net:SSL exists 
too). Is that possible ?

Markus

#!/usr/bin/perl

use strict;
use warnings;

use LWP::UserAgent;

use File::Basename;

 # use Net:SSL ();

sub writelog {
    my ($msg, $priority, $dummy, $stack_index) = @_;

    # swapout any carriage returns in error message:
    $msg =~ s|\n| |g;

    $stack_index ||= 0;

    print uc($priority) .  "$msg\n";
    return;
}  # end sub _writelog

sub log_and_die {
    my ( $msg, $priority, $dummy ) = @_;

    # get calling function details (one up the stack):
    writelog($msg, "crit: ", "", 1);
    die $msg;
}


# utility function to transfer a file via GET or PUT to
sub http_transfer {

    my ( $url, $file, $method, $site_details ) = @_;

    die "Need url and dest_file as params" unless @_ > 1;

    # set the method:
    $method ||= "get";

    # set the url:
    $url ||= _url_from_site_details($site_details);

    log_and_die("I need a URL!") unless ($url);

    writelog("Try to [$method] [$url]");

    # skip certification verification:
    my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0 });
    my $response;


    # only needed for gets:
    # create the dest file dir unless it already exists:
    my $file_dir ||= dirname($file);
    unless ( -d $file_dir ) {
        writelog "$file_dir doesn't exist - will create now.";
        make_path $file_dir ;
    }

    # set content_file for output, and send the request:
    $response = $ua->get($url, ':content_file' => $file );


    if ( $response->is_error ) {
        log_and_die( "[" . $response->status_line . "] error trying to 
$method $url.");
    } else {
        writelog( "[" . $response->status_line . "] for $method transfer to 
$url.");
    }

} # end sub _http_transfer

http_transfer( "https://test.com/file " , "download.tmp");


"Shlomi Fish" <[email protected]> wrote in message 
news:[email protected]...
Hello Markus,

On Sun, 23 Sep 2012 00:19:38 +0100
"Markus Moeller" <[email protected]> wrote:

> Hi,
>
> I have a problem that my perl modules are not anymore downloading a
> large file from a https site.  It worked with a previoius built, but
> since I update all modules via cpan it fails after downloading  some
> parts.
>
> I use the following code:
>
> sub http_transfer {
>
>     my ( $url, $file  ) = @_;
>
>     die "Need url and dest_file as params" unless @_ > 1;
>
>     # set the method:
>     $method ||= "get";
>
>     log_and_die("I need a URL!") unless ($url);
>
>     # skip certification verification:
>     my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname =>
> 0 }); my $response;
>
>     if ( $method eq "get" ) {
>
>         my $file_dir ||= dirname($file);
>         unless ( -d $file_dir ) {
>             make_path $file_dir ;
>         }
>
>         # set content_file for output, and send the request:
>         $response = $ua->get($url, ':content_file' => $file );
>
>     }
>     if ( $response->is_error ) {
>         log_and_die( "[" . $response->status_line . "] error trying
> to $method $url.");
>     }
> } # end sub _http_transfer
>
>

Your code is not self-contained, and is strange and suffers from bad idioms.
Can you please provide a self-contained, reproducing, example that
all of us can run?

> The platform I run on is Solaris 10 and perl ,  openssl is compiled
> with SUNWspro cc.
>

Ouch!

Do you know if the same code is working fine on an up-to-date Linux 
distribution?

Regards,

Shlomi Fish

> Any idea how to debug ?  When I use truss I see my old perl modules
> just read until the end whereas the new modules for some reason get a
> read = 0 somewhere at the beginning of the file download.
>
> Thank you
> Markus
>
>



-- 
-----------------------------------------------------------------
Shlomi Fish       http://www.shlomifish.org/
My Public Domain Photos - http://www.flickr.com/photos/shlomif/

Real programmers don’t write workarounds. They tell their users to upgrade
their software.

Please reply to list if it's a mailing list post - http://shlom.in/reply .