Twisted Agent不会从字节构建请求

时间:2017-06-01 07:07:01

标签: python twisted

我通过尝试构建RSS agregator来学习Twisted。当我尝试使用Web代理构建请求时,我告诉我没有提供url参数作为字节:

[Failure instance: Traceback (failure with no frames): <class 'twisted.web._newclient.RequestGenerationFailed'>: [<twisted.python.failure.Failure builtins.TypeError: sequence item 0: expected a bytes-like object, str found>]

但我想我做到了:

from twisted.internet import reactor
from twisted.web.client import Agent

def request_sent(response):
    print ('I got something!')

def request_failed(reason):
    print (reason)

def feed_loader_main():
    """
    Starts and manage the reactor
    """
    agent = Agent(reactor)

    d = agent.request(
        'GET',
        'http://www.example.com'.encode('utf8')   ##### <- HERE
    )

    d.addCallback(request_sent)
    d.addErrback(request_failed)

    print ('Firing reactor!')
    reactor.run()

if __name__ == '__main__':
    feed_loader_main()

这是扭曲的黑魔法还是我的编码不好?

1 个答案:

答案 0 :(得分:2)

该异常实际上并没有说您没有提供URL作为字节。它只是在某个地方说它需要字节并改为使用str(unicode)。

我猜你是在Python 3上,因为我可以用Python 3上的代码复制你的异常而不是Python 2.我不确定你使用的是什么版本的Twisted但是我怀疑这不是'特别是扭曲版本。不过,在未来的问题中指定Python和Twisted的版本是个好主意。

您传递给request的另一个值是"GET",而在Python 3上,这是一个str(unicode)。如果你对它进行编码(或者只是使用b"..."使其成为字节文字),那么异常就会消失。