2016-09-06 11 views
2

perl의 LWP :: UserAgent 모듈을 사용하여 HTTPS 프록시를 통해 URL을 요청하고 싶습니다. 이 문제에 관해서는 몇 가지 참고 문헌이 있지만 아무 것도 도움이되지 않습니다.Perl LWP :: UserAgent를 사용하는 프록시를 통한 HTTPS

#!/usr/bin/perl 
use strict; 
use warnings; 
use LWP::UserAgent; 
use Data::Dumper; 

BEGIN { 
    $ENV{HTTPS_PROXY} = 'https://<IP>:<PORT>'; 
    $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; 
    $ENV{HTTPS_PROXY_USERNAME} = '<API_KEY>'; 
    $ENV{HTTPS_PROXY_PASSWORD} = ''; 
    $ENV{HTTPS_DEBUG} = 1; #Add debug output 
} 

my $ua = LWP::UserAgent->new(ssl_opts => {verify_hostname => 0}, SSL_version => 'SSLv3', allowed_protocols => ['https', 'http']); 
$ua->proxy(['https', 'http'], 'https://<IP>:<PORT>'); 
my $req = HTTP::Request->new('GET','https://<DOMAIN_URL>'); 
print STDERR Dumper($ua); 
my $response = $ua->request($req); 
print $response->code ."\n"; 
print STDERR Dumper($response); 

내가이 오류를 얻을 : 나 LWP에서 allowed_protocols를 지정에도 불구하고

SSL connect attempt failed error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol at /home/user/project/local/lib/perl5/LWP/Protocol/http.pm line 51.

를, HTTPS 프록시 및 HTTPS되는 URL 방식의 방식은 여전히 ​​LWP :: 프로토콜 : HTTP 위로 이동 LWP :: Protocol :: HTTPS가 아닙니다.

는 또한 LWP :: 프로토콜의 버전 :: HTTPS 이것은 나를 위해 일한

+0

고정! 나에게 어떤 제안을 해봐도 –

+0

정말로 나는 두려워하지 않는다. 테스트 할 서버를 제공 할 수 있다면 놀 수 있습니다. 하지만 내 머리 꼭대기에는 아이디어가 없습니다. – simbabque

+0

그것의 자격 증명을 가진 사설 프록시 클라우드 .. –

답변

2

(포럼 중 하나에 언급 된) LWP :: 해당 UserAgent와 동일한 6.06 인 것을 확인 :

use LWP::UserAgent; 

$ua = LWP::UserAgent->new(); 
$ua->proxy('https', 'connect://<USER>:<PSWD>@<IP>:<PORT>/'); 

$ua->get('https://www.somesslsite.com'); 

HTTPS Proxy and LWP::UserAgent

주 : 나를 위해 환경 인증 (HTTPS_PROXY_USERNAME)을 didnt 작동합니다. 위와 같이 URL에 입력해야했습니다.

my $ua = LWP::UserAgent->new; 
$ua->proxy(https => 'http://user:[email protected]'); 
$ua->get('https://server'); 

는 다른 방법으로 설정할 수있는 다음 proxy 기능과 함께 다른 응용 프로그램에서 발견

+1

'connect : //'체계는'LWP :: Protocol :: connect'가 설치된 경우에만 작동합니다. 6.06 이전의 LWP 버전에서도 작동합니다. 그러나 6.06부터 시작하는 버전에서는 추가 모듈을 설치할 필요가 없기 때문에 내장 프록시 기능을 사용하는 것이 좋습니다. –

2

LWP의 최신 버전과 올바른 설정 (당신은 버전 6.06로 시작하는) 단지 동일한 구문을 사용하는 것입니다 환경 변수 https_proxy을 같은 값 (예 : http://user:[email protected])으로 변경하십시오.

IO :: Socket :: SSL (버전 6.0 이후 기본값)과 함께 사용하면 6.06 이전에는 프록시 지원이 중단되었습니다. 귀하가 궁금한 문법은 이전 백엔드 Crypt::SSLeay에 대한 것이므로 더 이상 권장되지 않습니다. 왜냐하면 인증서가 제대로 검사되지 않기 때문입니다.

+1

동의. OP, [Crypt :: SSLeay가 필요하십니까?] (https://metacpan.org/pod/Crypt::SSLeay#DO-YOU-NEED-Crypt::SSLeay) 및 [코드가 Crypt에 정말로 의존합니까? :: SSLeay?] (https://www.nu42.com/2014/04/does-your-code-really-depend-on.html). –