<p>您在这里的问题突出了文档中的一个严重疏忽;无论是在API文档中,还是在的叙述性文档中。如果Jean-Paul不能找到“正确的方法”来做到这一点,那么对于一个普通用户来说显然是没有希望的。<a href="https://twistedmatrix.com/trac/ticket/7669" rel="noreferrer">I have filed a bug to correct this oversight</a>。在</p>
<p>同时,请避免让保罗的解决办法。虽然它是功能性的,但它所涉及的技术几乎肯定会在未来的版本中毫无预警地崩溃(正如他明确指出的那样)。幸运的是,有一些支持的方法可以做到这一点。如果您有一个备用信任根,<a href="https://twistedmatrix.com/documents/14.0.2/api/twisted.internet.ssl.Certificate.html" rel="noreferrer">^{<cd1>}</a>可用作<code>trustRoot</code>参数的值。您可以这样使用它(我用Twisted 14.0.2测试了以下示例):</p>
<pre><code>from __future__ import print_function
from twisted.web.client import Agent, BrowserLikePolicyForHTTPS
from twisted.internet.task import react
from twisted.internet.ssl import Certificate
from twisted.internet.protocol import Protocol
from twisted.python.filepath import FilePath
from twisted.internet.defer import inlineCallbacks, Deferred
@inlineCallbacks
def main(reactor):
customPolicy = BrowserLikePolicyForHTTPS(
Certificate.loadPEM(FilePath("your-trust-root.pem").getContent())
)
agent = Agent(reactor, customPolicy)
response = yield agent.request(
"GET", "https://your-web-site.example.com/"
)
done = Deferred()
class CaptureString(Protocol):
def dataReceived(self, data):
print("Received:", data)
def connectionLost(self, reason):
done.callback(None)
response.deliverBody(CaptureString())
yield done
react(main)
</code></pre>