2017-09-29 16 views
2

ASCII가 아닌 문자가있는 URL을 요청하려고합니다. 예 : http://perry.wikia.com/wiki/Página_principalá 기호가 있습니다.Perl과 utf-8 URI (일부 ASCII 문자가 아닌)로 HTTP 요청을 보내면 404 Not Found 오류가 발생합니다.

나는 LWP :: 해당 UserAgent와 함께 해봤지만 404 찾을 수 없음 오류가 발생합니다 :

#!/usr/bin/perl 

use utf8; 
use HTTP::Tiny; 
use Encode qw(decode encode); 

my $url = 'http://perry.wikia.com/wiki/Página_principal'; 
#~ my $url = encode('UTF-8','http://perry.wikia.com/wiki/Página_principal'); # doesn't work either 
my $response = HTTP::Tiny->new->get($url); 
if ($response->{success}) { 
    my $html = $response->{content}; 
} else { 
    die "Unexpected error requesting $url : " . $response->{status}; 
} 
+0

당신은 URI 인코딩을 소홀히했습니다. 'http : // perry.wikia.com/wiki/P % C3 % A1gina_principal'은 실제로 얻고 자하는 것입니다. – tjd

+0

[URI :: Encode] (https://metacpan.org/pod/URI::Encode) 또는 [URI :: Escape] (https://metacpan.org/pod/URI::Escape)를 확인하십시오 – tjd

+0

I 언급하는 것을 잊어 버렸습니다. URI를 이스케이프하기 위해 URI :: Escape를 사용하려고했으나 작동하지 않습니다. 동일한 404 오류를 반환합니다. 실제로 이미 인코딩 된 URI에 대한 요청을하려고하면 http://perry.wikia.com/wiki/P%C3%A1gina_principal이 작동하지 않습니다./ – Akronix

답변

0

:

#!/usr/bin/perl 

use utf8; 
use LWP::UserAgent; 
use Encode qw(decode encode); 

my $br = LWP::UserAgent->new; 
#~ my $url = 'http://perry.wikia.com/wiki/Página_principal'; # doesn't work either 
my $url = encode('UTF-8','http://perry.wikia.com/wiki/Página_principal'); 
my $response = $br->get($url); 
if ($response->{success}) { 
    my $html = $response->{content}; 
} else { 
    die "Unexpected error requesting $url : " . $response->status_line; 
} 

내가 HTTP : 작은도 같은 결과를 해봤를 이것은 Perl 모듈의 버그가 아닙니다. 이 URL은 실제로 404를 반환합니다.