2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-22 08:11:44 +00:00

HttpUtils: 301 patches from Wolfgang, Boris & me

git-svn-id: https://svn.fhem.de/fhem/trunk@4259 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2013-11-22 12:48:31 +00:00
parent f48d009944
commit c096049a3b

View File

@ -69,13 +69,15 @@ CustomGetFileFromURL($$@)
RETRY: RETRY:
my $displayurl= $quiet ? "<hidden>" : $url; my $displayurl= $quiet ? "<hidden>" : $url;
Log3 undef, $loglevel, "CustomGetFileFromURL url=$displayurl";
if($url !~ /^(http|https):\/\/(([^:\/]+):([^:\/]+)@)?([^:\/]+)(:\d+)?(\/.*)$/) { if($url !~ /^(http|https):\/\/(([^:\/]+):([^:\/]+)@)?([^:\/]+)(:\d+)?(\/.*)$/) {
Log3 undef, $loglevel, Log3 undef, $loglevel,
"CustomGetFileFromURL $displayurl: malformed or unsupported URL"; "CustomGetFileFromURL $displayurl: malformed or unsupported URL";
return undef; return undef;
} }
my ($protocol,$authstring,$user,$pwd,$host,$port,$path)= ($1,$2,$3,$4,$5,$6,$7); my ($protocol,$authstring,$user,$pwd,$host,$port,$path) =
($1,$2,$3,$4,$5,$6,$7);
if(defined($port)) { if(defined($port)) {
$port =~ s/^://; $port =~ s/^://;
@ -103,8 +105,8 @@ CustomGetFileFromURL($$@)
} }
$errstr= $@ if(!$conn); $errstr= $@ if(!$conn);
if(!$conn) { if(!$conn) {
Log3 undef, $loglevel, Log3 undef, $loglevel, "CustomGetFileFromURL $displayurl: ".
"CustomGetFileFromURL $displayurl: Can't connect to $protocol://$host:$port, $errstr"; "Can't connect to $protocol://$host:$port, $errstr";
undef $conn; undef $conn;
return undef; return undef;
} }
@ -130,7 +132,8 @@ CustomGetFileFromURL($$@)
vec($rin, $conn->fileno(), 1) = 1; vec($rin, $conn->fileno(), 1) = 1;
my $nfound = select($rout=$rin, undef, undef, $timeout); my $nfound = select($rout=$rin, undef, undef, $timeout);
if($nfound <= 0) { if($nfound <= 0) {
Log3 undef, $loglevel, "CustomGetFileFromURL $displayurl: Select timeout/error: $!"; Log3 undef, $loglevel,
"CustomGetFileFromURL $displayurl: Select timeout/error: $!";
undef $conn; undef $conn;
return undef; return undef;
} }
@ -142,31 +145,33 @@ CustomGetFileFromURL($$@)
$ret=~ s/(.*?)\r\n\r\n//s; # Not greedy: switch off the header. $ret=~ s/(.*?)\r\n\r\n//s; # Not greedy: switch off the header.
my @header= split("\r\n", $1); my @header= split("\r\n", $1);
my @header0= split(" ", $header[0]); my @header0= split(" ", shift @header);
my $code= $header0[1]; my $code= $header0[1];
Log3 undef, 4, "CustomGetFileFromURL $displayurl: Code $code ($header[0])"; Log3 undef, $loglevel,
if($code==301) { "CustomGetFileFromURL $displayurl: HTTP Response code $code";
# redirect
my @header1= split(" ", $header[1]); if($code == 301 || $code == 302 || $code == 303) { # redirect
my $location= $header1[1]; if(++$redirects > 5) {
Log3 undef, 4, "CustomGetFileFromURL $displayurl: Redirect"; Log3 undef, $loglevel,
"CustomGetFileFromURL $displayurl: Too many redirects";
$redirects++;
if($redirects> 5) {
Log3 undef, 2, "CustomGetFileFromURL $displayurl: Too many redirects";
} else { } else {
$url= $location; map { $url=$1 if($_ =~ m/Location:\s*(\S+)$/) } @header;
Log3 undef, $loglevel, "CustomGetFileFromURL $displayurl: ".
"Redirect to ".($quiet ? "<hidden>" : $url);
goto RETRY; goto RETRY;
} }
} }
my $hostpath= $quiet ? "<hidden>" : $host . $path; my $hostpath= $quiet ? "<hidden>" : $host . $path;
Log3 undef, 4, Log3 undef, $loglevel,
"CustomGetFileFromURL $displayurl: Got data, length: ".length($ret); "CustomGetFileFromURL $displayurl: Got data, length: ".length($ret);
if(!length($ret)) { if(!length($ret)) {
Log3 undef, 4, "CustomGetFileFromURL $displayurl: Zero length data, header follows..."; Log3 undef, $loglevel,
"CustomGetFileFromURL $displayurl: Zero length data, header follows...";
for (@header) { for (@header) {
Log3 undef, 4, "CustomGetFileFromURL $displayurl: $_"; Log3 undef, $loglevel, "CustomGetFileFromURL $displayurl: $_";
} }
} }
undef $conn; undef $conn;