背景:
我基于LWP::Protocol为HTTP(S)编写了AnyEvent::HTTP“实现者”。 (即:它实现 HTTP和HTTPS)。
它与LWP::Protocol::AnyEvent::http或Coro::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
)时。
我可以强制选择我的“实施者”吗?或者有更自然的方法来做到这一点吗?
答案 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协议处理程序