Perl - 强制LWP :: Protocol子类选择,还是有更好的方法?

时间:2013-12-29 07:45:08

标签: perl asynchronous lwp-useragent anyevent

背景

我基于LWP::Protocol为HTTP(S)编写了AnyEvent::HTTP“实现者”。 (即:它实现 HTTP和HTTPS)。

它与LWP::Protocol::AnyEvent::httpCoro::LWP不同,因为它不会$protocol->request上的BLOCK。我为Coro::LWP所做的select(),名称解析等实现了大部分相同的黑客攻击,但更好地利用了AnyEvent

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

我还写了一个HTTP::Response的子类,如果他们在完成之前尝试使用部分响应,就会强制阻止标准的“消费者”方法;它还添加了与内部/提供的AnyEvent ::CondVar良好协作的方法,以便您可以立即触发大量请求,以及使用AnyEvent执行其他操作。 (我还覆盖了所有LWP :: UserAgent的post send_request()逻辑,将其推迟到实际请求完成之前。

问题

我正在做一个黑客攻击,因为我的LWP::UserAgent子类“升级”了网址scheme,为'_async'添加了异步请求,我得到了{{3子类是匹配/^https?_async$/

的方案的“实现者”

问题

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

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

1 个答案:

答案 0 :(得分:2)

您需要在implementor电话附近拨打send_request

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

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