私は現在、ツイストされたPythonライブラリを使用してhttps経由でホストされているコンテンツにアクセスする際にいくつかの問題を抱えています。私はこの図書館が新しく、欠落している概念があると仮定していますが、それは問題を引き起こしていますが、例に基づいていない可能性があります。まっすぐに、それをこのコードを実行するとき ツイストされたHTTPSクライアント
from twisted.python.log import err
from twisted.web.client import Agent
from twisted.internet import reactor
from twisted.internet.ssl import optionsForClientTLS
def display(response):
print("Received response")
print(response)
def main():
contextFactory = optionsForClientTLS(u"https://example.com/")
agent = Agent(reactor, contextFactory)
d = agent.request("GET", "https://example.com/")
d.addCallbacks(display, err)
d.addCallback(lambda ignored: reactor.stop())
reactor.run()
if __name__ == "__main__":
main()
SSL上で見出しHTTPの下 https://twistedmatrix.com/documents/current/web/howto/client.html
:ここ
は、私は例を集めているページへのリンクです失敗する。
Traceback (most recent call last):
File "https.py", line 19, in <module>
main()
File "https.py", line 11, in main
contextFactory = optionsForClientTLS(u"https://example.com/")
File "/home/amaricich/.local/lib/python2.7/site-packages/twisted/internet/_sslverify.py", line 1336, in optionsForClientTLS
return ClientTLSOptions(hostname, certificateOptions.getContext())
File "/home/amaricich/.local/lib/python2.7/site-packages/twisted/internet/_sslverify.py", line 1198, in __init__
self._hostnameBytes = _idnaBytes(hostname)
File "/home/amaricich/.local/lib/python2.7/site-packages/twisted/internet/_sslverify.py", line 86, in _idnaBytes
return idna.encode(text)
File "/usr/local/lib/python2.7/dist-packages/idna/core.py", line 355, in encode
result.append(alabel(label))
File "/usr/local/lib/python2.7/dist-packages/idna/core.py", line 276, in alabel
check_label(label)
File "/usr/local/lib/python2.7/dist-packages/idna/core.py", line 253, in check_label
raise InvalidCodepoint('Codepoint {0} at position {1} of {2} not allowed'.format(_unot(cp_value), pos+1, repr(label)))
idna.core.InvalidCodepoint: Codepoint U+003A at position 6 of u'https://example' not allowed
このエラーが間違っていましたoptionsForClientTLSに渡されるパラメータを信じるために私を導く:私はこのようになりますエラーが発生します。完全なURLではなくホスト名が必要なので、パラメータを簡略化してexample.comに変更しました。その変更が行われると、関数は正常に完了しました。
残念なことに、変更後、スクリプトは、agent.requestを呼び出す行で失敗しました。このエラーはoptionsForClientTLSによって生成されているオブジェクトは、作成時にエージェントに渡されることが期待されているオブジェクトのタイプではないと信じて私をリード
Traceback (most recent call last):
File "https.py", line 19, in <module>
main()
File "https.py", line 13, in main
d = agent.request("GET", "https://example.com/")
File "/home/amaricich/.local/lib/python2.7/site-packages/twisted/web/client.py", line 1596, in request
endpoint = self._getEndpoint(parsedURI)
File "/home/amaricich/.local/lib/python2.7/site-packages/twisted/web/client.py", line 1580, in _getEndpoint
return self._endpointFactory.endpointForURI(uri)
File "/home/amaricich/.local/lib/python2.7/site-packages/twisted/web/client.py", line 1456, in endpointForURI
uri.port)
File "/home/amaricich/.local/lib/python2.7/site-packages/twisted/web/client.py", line 982, in creatorForNetloc
context = self._webContextFactory.getContext(hostname, port)
AttributeError: 'ClientTLSOptions' object has no attribute 'getContext'
:それは供給エラーは、このでした。存在しない関数が呼び出されようとしています。すべてのことを言って、私は2つの質問があります。
- この例は廃止予定ですか? HTTP要求をすべて魅力的にする前述の例は、間違ったことをやっているのですか?
- 私は、HTTPSを使用してサーバーからデータを取得する簡単な方法を探しています。このようなことを行うのが解決策ではない場合、HTTPS要求がどのようにねじれているのかをよく知っていますか?
あなたは聖人です!手伝ってくれてどうもありがとう。Treqは素晴らしい作品で、私の仕事を続けさせてくれるでしょう。あなたは宝石であり、私はあなたとあなたがするすべてを感謝します。 – w33t
私は助けることができてうれしいです:D人々がDMV領域でPython/Twistedを使用するのを聞いてうれしいです。 –