twisted中的createResolver()不工作

2024-05-28 20:58:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的代理脚本,其中我使用installResolver函数来选择脚本读取其主机文件的位置:

from twisted.internet import reactor
from twisted.web import proxy, server
from twisted.python import log
from twisted.names import client

def createResolver(servers=None, resolvconf=None, hosts=None):
    if platform.getType() == 'posix':
        if resolvconf is None:
            resolvconf = b'/etc/resolv.conf'
        if hosts is None:
            hosts = b'/root/example'
        theResolver = Resolver(resolvconf, servers)
        hostResolver = hostsModule.Resolver(hosts)
    else:
        if hosts is None:
            hosts = r'c:\windows\hosts'
        from twisted.internet import reactor
        bootstrap = _ThreadedResolverImpl(reactor)
        hostResolver = hostsModule.Resolver(hosts)
        theResolver = root.bootstrap(bootstrap, resolverFactory=Resolver)

    L = [hostResolver, cache.CacheResolver(), theResolver]
    return resolve.ResolverChain(L)

site = server.Site(proxy.ReverseProxyResource('www.example.com', 80, ''.encode("utf-8")))
reactor.listenTCP(80, site)
reactor.run()

每当我运行这个脚本时,它就会超时而不起作用。有人能告诉我我做错了什么吗?谢谢!!你知道吗


Tags: fromimport脚本noneifistwistedbootstrap
1条回答
网友
1楼 · 发布于 2024-05-28 20:58:02

createResolver() in twisted not working

您需要传入要读取的hosts文件,并确保它可读(即它所在的位置)/root/example意味着您需要以root身份运行才能读取它。你不需要重写这个方法。我明天再安装试试。你知道吗

创建一个文件/tmp/example,其中包含我使用的条目

127.0.0.6 twistfoo.com

这是工作代码

from twisted.names import client
from twisted.internet import reactor

def do_lookup(domain):
    hosts = "/tmp/example"
    resolver = client.createResolver(servers=None, resolvconf=None, hosts="/tmp/example")
    d = resolver.getHostByName(domain)
    d.addBoth(lookup_done)

def lookup_done(result):
    print(result)
    reactor.stop()

domain = b'twistfoo.com'
reactor.callLater(0, do_lookup, domain)
reactor.run()

在命令行上运行这个命令,您将看到输出

127.0.0.6

相关问题 更多 >

    热门问题