Perl-ForceLWP::协议子类选择,或者有更好的方法吗



背景

我已经为基于AnyEvent::HTTP的HTTP(S)编写了一个LWP::Protocol"implementer"。(即:它同时实现HTTP和HTTPS)。

它与LWP::Protocol::AnyEvent::http或Coro::LWP的不同之处在于,它不会在$protocol->request上阻塞。我对select()、名称解析等实现了与Coro::LWP相同的大部分技巧,但更好地利用了AnyEvent。

$protocol->request()返回的HTTP响应目前是230 - Pending Completion of Request,但我愿意用更好的方式来传达它不是一个完整的请求。

我还编写了HTTP::Response的一个子类,如果标准的"消费者"方法试图在响应完成之前使用部分响应,它会强制BLOCKING;它还添加了一些方法,可以很好地使用内部/提供的AnyEvent::CondVar,这样您就可以一次发出大量请求,还可以使用AnyEvent做其他事情。(我还覆盖了LWP::UserAgent的post-send_request()逻辑,将其推迟到真正的请求完成)。

问题

我目前正在进行一次破解,如果我的LWP::UserAgent子类通过为异步请求添加'_async'来"升级"URLscheme,并且我的LWP::Protocol子类是匹配/^https?_async$/的方案的"实现者">

问题

如何让我的LWP::UserAgent子类选择我的(more异步)HTTP&HTTPS协议的"实现者"而不是安装在系统上的其他人?(即:当LWP::UserAgent子类调用LWP::Protocol::create时)。

我可以强制选择我的"实施者"吗?或者有更自然的方法可以做到这一点吗?

您需要在send_request呼叫附近呼叫implementor

LWP::Protocol::implementor('http', 'your::module::name');

请参阅的来源http://search.cpan.org/~gaas/LWP-Protocol-http10-6.03/lib/LWP/Protocol/http10.pm,了解需要实现什么来替换HTTP协议处理程序

最新更新