diff options
-rwxr-xr-x | lib/Travelynx.pm | 1 | ||||
-rw-r--r-- | lib/Travelynx/Helper/DBDB.pm | 47 |
2 files changed, 38 insertions, 10 deletions
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 5d440dc..6addb5d 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -413,6 +413,7 @@ sub startup { my ($self) = @_; state $dbdb = Travelynx::Helper::DBDB->new( log => $self->app->log, + dbris_config => $self->app->config->{dbris}, main_cache => $self->app->cache_iris_main, realtime_cache => $self->app->cache_iris_rt, root_url => $self->base_url_for('/')->to_abs, diff --git a/lib/Travelynx/Helper/DBDB.pm b/lib/Travelynx/Helper/DBDB.pm index a310aa3..e3d5539 100644 --- a/lib/Travelynx/Helper/DBDB.pm +++ b/lib/Travelynx/Helper/DBDB.pm @@ -10,6 +10,7 @@ use 5.020; use Encode qw(decode); use Mojo::Promise; +use Mojo::UserAgent; use JSON; sub new { @@ -61,9 +62,22 @@ sub has_wagonorder_p { } } - $self->{user_agent}->request_timeout(5) - ->get_p( $url => $self->{header} ) - ->then( + my $agent = $self->{user_agent}; + my $proxy; + if ( my @proxies = @{ $self->{dbris_config}{'bahn.de'}{proxies} // [] } ) { + $proxy = $proxies[ int( rand( scalar @proxies ) ) ]; + } + elsif ( my $p = $self->{dbris_config}{'bahn.de'}{proxy} ) { + $proxy = $p; + } + + if ($proxy) { + $agent = Mojo::UserAgent->new; + $agent->proxy->http($proxy); + $agent->proxy->https($proxy); + } + + $agent->request_timeout(5)->get_p( $url => $self->{header} )->then( sub { my ($tx) = @_; if ( $tx->result->is_success ) { @@ -82,7 +96,7 @@ sub has_wagonorder_p { } return; } - )->catch( + )->catch( sub { my ($err) = @_; $self->{log}->debug("${debug_prefix}: n ($err)"); @@ -90,7 +104,7 @@ sub has_wagonorder_p { $promise->reject; return; } - )->wait; + )->wait; return $promise; } @@ -121,9 +135,22 @@ sub get_wagonorder_p { return $promise; } - $self->{user_agent}->request_timeout(5) - ->get_p( $url => $self->{header} ) - ->then( + my $agent = $self->{user_agent}; + my $proxy; + if ( my @proxies = @{ $self->{dbris_config}{'bahn.de'}{proxies} // [] } ) { + $proxy = $proxies[ int( rand( scalar @proxies ) ) ]; + } + elsif ( my $p = $self->{dbris_config}{'bahn.de'}{proxy} ) { + $proxy = $p; + } + + if ($proxy) { + $agent = Mojo::UserAgent->new; + $agent->proxy->http($proxy); + $agent->proxy->https($proxy); + } + + $agent->request_timeout(5)->get_p( $url => $self->{header} )->then( sub { my ($tx) = @_; @@ -141,14 +168,14 @@ sub get_wagonorder_p { } return; } - )->catch( + )->catch( sub { my ($err) = @_; $self->{log}->debug("${debug_prefix}: error ${err}"); $promise->reject($err); return; } - )->wait; + )->wait; return $promise; } |