1

背景

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

它与LWP::Protocol::AnyEvent::httpCoro::LWP的不同之处在于它不会 BLOCK on $protocol->request。我已经为 select()、名称解析等实现了与Coro::LWP相同的大部分技巧,但更好地利用了AnyEvent

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

我还编写了HTTP::Response的一个子类,如果他们试图在响应完成之前使用部分响应,它会强制标准“消费者”方法上的 BLOCKING;它还添加了与内部/提供的 AnyEvent::CondVar良好工作的方法,以便您可以一次触发大量请求,以及使用AnyEvent做其他事情。(我还覆盖了所有 LWP::UserAgent 的后send_request()逻辑,将其推迟到真正的请求完成)。

问题

我目前正在做一个 hack,如果我的LWP::UserAgentscheme子类通过附加'_async'异步请求来“升级”URL ,并且我已经让LWP::Protocol子类成为方案匹配的“实现者”/^https?_async$/

问题

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

我可以强制选择我的“实施者”吗?还是有更自然的方法来做到这一点?

4

1 回答 1

2

您需要implementor在您的呼叫附近send_request拨打电话:

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

See source of http://search.cpan.org/~gaas/LWP-Protocol-http10-6.03/lib/LWP/Protocol/http10.pm to understand what you need to implement to replace the HTTP protocol handler

于 2013-12-29T07:52:21.237 回答