Skip to main content
 首页 » 编程设计

python之我应该如何从电路框架中获取其他 URL

2024年10月01日2mate10pro

应该如何从 Python 3 的 Circuits 框架 Controller 中的一个方法中获取多个 URL?这是我想要的一个简单示例,除了 urllib3。最好在开始时请求两个 URL,当它们都返回时,继续执行。

# -*- coding: utf-8 -*- 
__author__ = 'jscarbor' 
import urllib3 
from circuits.web import Server, Controller, Static 
 
http = urllib3.PoolManager() 
 
 
class Root(Controller): 
    def index(self): 
        self.response.headers["Content-Type"] = "text/plain" 
        a = http.request('GET', 'https://www.w3.org/services/html2txt?url=http%3A%2F%2Fwww.example.com%2F').data 
        b = http.request('GET', 'http://home.hiwaay.net/~jimes/checklist.txt').data 
 
        return "%s %s" % (a, b) 
 
 
(Server(8011) + Root()).run() 

请您参考如下方法:

您需要使用与 Controller 不同的 channel 将 circuits.web.client.Client 组件注册到您的 Controller (因为事件名称在客户端和服务器组件中相同)。然后您可以将请求事件发送到此 channel 并等待响应。 在您的特定示例中,您需要为请求事件注册一个处理程序以挂接到响应过程。 我目前没有工作示例,但这是一个起点的基础:

from circuits.web.client import Client, request as request_event 
from circuits.web import Server, Controller 
from circuits import handler 
 
 
class Root(Controller): 
 
    @handler('request') 
    def _on_request(self): 
 
        a = yield self.wait(request_event('GET', 'https://www.w3.org/services/html2txt?url=http%3A%2F%2Fwww.example.com%2F'), channel='url-fetching') 
        b = yield self.wait((request_event('GET', 'http://home.hiwaay.net/~jimes/checklist.txt'), channel='url-fetching') 
 
        self.response.headers["Content-Type"] = "text/plain" 
        self.response.body = "%s %s" % (a.value.read(), b.value.read()) 
 
 
(Server(('0.0.0.0', 8011)) + Root() + Client(channel='url-fetching').run()