summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2020-11-06 11:23:22 +0100
committerDaniel Friesel <derf@finalrewind.org>2020-11-06 11:23:22 +0100
commit5e967451211ecee9b7810311acdc96cafdfce228 (patch)
tree4cb29af3d10748d312442183935f72f225dcd83d
parentc70280a93562e34ad3a711e23d138a96aca5ad58 (diff)
HAFAS: Distinguish between disguised HTTP 404 and invalid XML
-rw-r--r--lib/Travelynx/Helper/HAFAS.pm16
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/Travelynx/Helper/HAFAS.pm b/lib/Travelynx/Helper/HAFAS.pm
index 6aefcf1..bee4cba 100644
--- a/lib/Travelynx/Helper/HAFAS.pm
+++ b/lib/Travelynx/Helper/HAFAS.pm
@@ -197,10 +197,20 @@ sub get_xml_p {
$body
=~ s{<Attribute([^>]+)text="([^"]*)"([^"=]*)""}{<Attribute$1text="$2&#042;$3&#042;"}s;
eval { $tree = XML::LibXML->load_xml( string => $body ) };
- if ($@) {
- $self->{log}->info("load_xml($url): $@");
+ if ( my $err = $@ ) {
+ if ( $err =~ m{extra content at the end}i ) {
+
+ # We requested XML, but received an HTML error page
+ # (which was returned with HTTP 200 OK).
+ $self->{log}->debug("load_xml($url): $err");
+ }
+ else {
+ # There is invalid XML which we might be able to fix via
+ # regular expressions, so dump it into the production log.
+ $self->{log}->info("load_xml($url): $err");
+ }
$cache->freeze( $url, $traininfo );
- $promise->resolve($traininfo);
+ $promise->reject("hafas->get_xml_p($url): $err");
return;
}