Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Anyevent::HTTP не работает tls


Автор: HeinzFelfe 17.1.2013, 16:27
http://www.windley.com/archives/2012/03/asynchronous_http_requests_in_perl_using_anyevent.shtml:
Код

#!/usr/bin/perl
use strict;
use AnyEvent;
use AnyEvent::HTTP;
use Time::HiRes qw(time);

my $cv = AnyEvent->condvar( cb => sub {
    warn "done";
});

my $urls = ["https://www.google.com",
        "http://www.windley.com/",
        "https://www.bing.com",
        "http://www.example.com",
        "http://www.wetpaint.com",
            "http://www.uh.cu"
        ];


my $start = time;

my $result;

$cv->begin(sub { shift->send($result) });
for my $url (@$urls) {
    $cv->begin;

    my $now = time;
    my $request;  
    $request = http_request(
      GET => $url, 
      timeout => 2, # seconds
      sub {
        my ($body, $hdr) = @_;
    if ($hdr->{Status} =~ /^2/) {
          push (@$result, join("\t", ($url,
                      " has length ",
                      $hdr->{'content-length'}, 
                      " and loaded in ",
                      time - $now,
                      "ms"))
           );
        } else {
      push (@$result, join("",
                   "Error for ",
                   $url,
                   ": (", 
                   $hdr->{Status}, 
                   ") ", 
                   $hdr->{Reason})
        );
    }
        undef $request;
        $cv->end;
      }
   );


  }

$cv->end;

warn "End of loop\n";

my $foo =   $cv->recv;

print join("\n", @$foo), "\n" if defined $foo;

print "Total elapsed time: ", time-$start, "ms\n";


В результате его выполнения у авотра получается такой результат:
Код

[web@dev00 tmp]$ ./ae1.pl 
End of loop
done at ./ae1.pl line 8.
http://www.windley.com/  has length 86636 & loaded in  0.16ms
https://www.google.com   has length 32408 & loaded in  0.29ms
https://www.bing.com     has length 32022 & loaded in  0.37ms
http://www.wetpaint.com  has length 93982 & loaded in  0.45ms
http://www.example.com   has length 2966  & loaded in  0.49ms
Total elapsed time: 0.507862091064453ms


У меня же получается такой:
Код

user@userPC:~$ ./1.pl
End of loop
done at ./1.pl line 8.
Error for https://www.google.com: (596) TLS support not available on this system
Error for https://www.bing.com: (596) TLS support not available on this system
http://www.windley.com/     has length    43659     and loaded in    0.967498064041138    ms
http://www.wetpaint.com     has length    83203     and loaded in    1.1262571811676    ms
http://www.example.com     has length    1111     and loaded in    1.22056889533997    ms
Error for http://www.uh.cu: (596) Время ожидания соединения истекло
Total elapsed time: 3.49392104148865ms


Кто-нибудь знает почему появляются ошибки при https соединении?
Код

Error for https://www.google.com: (596) TLS support not available on this system
Error for https://www.bing.com: (596) TLS support not available on this system

Автор: Pfailed 17.1.2013, 19:22
Net::SSLeay  установите

Автор: HeinzFelfe 17.1.2013, 20:05
Ага, видимо дело действительно в нем, спасибо.
Правда при установке возникает ошибка

Код

root@UserPC:/home/user/Net-SSLeay-1.52# perl Makefile.PL
*** Found OpenSSL-0.9.8k installed in /usr
*** Be sure to use the same compiler and options to compile your OpenSSL, perl,
    and Net::SSLeay. Mixing and matching compilers is not supported.


Ну и дальше ни чего не собирается и не устанавливается.
Ищу решение, может вы быстрее подскажете в чем заминка и что делать с этим OpenSSL-0.9.8k? 

Автор: Pfailed 17.1.2013, 21:00
Какая система, дистрибутив?

Автор: HeinzFelfe 18.1.2013, 03:40
Pfailed, спасибо за точную наводку на Net::SSLeay. В процессе проскочила такая же мысль, что проблема в ней, но что-то она не зацепилась в голове).
А с проблемой при установке разобрался сам.
Проблема решена установкой пакетов Libssl-dev и zlib1g-dev.
Плюс ещё ручками перетащил папку /usr/local/ssl/include/openssl в /usr/local/include. Наверное способ тупой и лишён всякой элегантности, но по другому заставить make видеть библиотеки из папки openssl у меня не получилось.
Подозреваю, что можно было похимичить внутри  makefile, но моих знаний хватило только что бы посмотреть значение флага -L, но его изменения ни чего не дало. 
Так что действовал в лоб.

Ещё раз спасибо, а то провозился бы я чувствую много дольше, пока сам не допер бы окончательно, что все дело в неустановленной Net::SSLeay.

UPD: Перенос папок не нужен, достаточно было установить библиотеки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)