Coro::LWP::UserAgent::timeout

use Coro::LWP; すると $ua->timeout が効かなくなるのでpatch

package Coro::LWP::UserAgent::timeout;

use strict;
use warnings;

use Coro;
use Coro::LWP;
use Coro::Timer;
use LWP::UserAgent;
use ;;
use HTTP::Response ();
use HTTP::Status ();

{
    no strict 'refs';
    no warnings 'redefine';
    my $original_send_request = *{'LWP::UserAgent::send_request'}{CODE};
    *{'LWP::UserAgent::send_request'} = sub {
        my $self = shift;

        my $ua_thread;
        my $response = HTTP::Response->new(HTTP::Status::HTTP_REQUEST_TIMEOUT, "timeout");
        $ua_thread  = async {
            my $to_h = AE::timer(
                $self->{timeout},
                0,
                sub {
                    $ua_thread->cancel("");
                }) if($self->{timeout});
            $response = $self->$original_send_request(@_);
        } @_;
        $ua_thread->join;
        $response;
    };
};

1;
created by https://id.mixi.jp/hanabokuro

コメント

コメントはありません

コメントを投稿

コメントを投稿するにはログインが必要です