나는 내가 asyncore 클라이언트 작업을 할 문서 tlslite 모든 단계가 믿는 것을 따랐습니다 - 나는 실제로 그것을 얻을 수 없다 유일한 비동기 클라이언트가 HTTP 1.0 클라이언트 인 Python 문서의 예입니다.이 때문에 HTTPS 연결을 설정하려고합니다. 매우 반 - 구운 방법. 또한 asyncore XMPP 클라이언트 나 TLS를 요청하는 XMPP 서버가 없기 때문에 상황에 가까운 곳으로 가야합니다. 그럼에도 불구하고 (비록 어떤 단계가 빠졌을지라도) 이전에했던 것보다 조금 나아진 것 같습니다. - 생각합니다. 나는 모든 필요한 단계를 보여주고 있습니다. __init__
. BTW, 나는 tlslite/test 디렉토리에서 pem 파일을 복사했습니다.
import asyncore, socket
from tlslite.api import *
s = open("./clientX509Cert.pem").read()
x509 = X509()
x509.parse(s)
certChain = X509CertChain([x509])
s = open("./clientX509Key.pem").read()
privateKey = parsePEMKey(s, private=True)
class http_client(TLSAsyncDispatcherMixIn, asyncore.dispatcher):
ac_in_buffer_size = 16384
def __init__(self, host, path):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.connect((host, 80))
TLSAsyncDispatcherMixIn.__init__(self, self.socket)
self.tlsConnection.ignoreAbruptClose = True
handshaker = self.tlsConnection.handshakeClientCert(
certChain=certChain,
privateKey=privateKey,
async=True)
self.setHandshakeOp(handshaker)
self.buffer = 'GET %s HTTP/1.0\r\n\r\n' % path
def handle_connect(self):
pass
def handle_close(self):
self.close()
def handle_read(self):
print self.recv(8192)
def writable(self):
return (len(self.buffer) > 0)
def handle_write(self):
sent = self.send(self.buffer)
self.buffer = self.buffer[sent:]
c = http_client('www.readyhosting.com', '/')
asyncore.loop()
이
파이썬 문서에서 asyncore 예 HTTP 클라이언트의 혼합이다, 게다가 나는 tlslite 워드 프로세서에서 수집 한 자신의 소스에서 리버스 엔지니어링 할 수 있었다 것. 이 (심지어 불완전한/작동하지 않지만) 적어도 당신의 탐구에 당신을 발전시킬 수 있기를 바랍니다 ...
개인적으로, 신발에서, 나는 asyncore에서 twisted으로 전환하는 것을 고려할 것입니다 - asyncore는 오래되고 녹슬었고, (내가 준 URL은 이미 TLS와 XMPP를 통합 한 문서에서 약간의 것이지만 ...).
감사합니다. 매우 도움이되었습니다. 그것은 The TLSAsyncDispatcherMixIn을 좀 더 자세하게 살펴볼 것을 권했고, 제 목적을위한 붉은 청어 였고 2 줄의 간단한 선으로 작업하는 TLS 마법을 얻을 수있었습니다. asyncore가 "오래되고 녹슬 었음"과 관련된 댓글을 작성하거나 링크를 제공 할 수 있습니까? – Bill
그물에 대한 많은 토론. koichitamura.blogspot.com/2008/04/.... Twisted는 활발한 개발과 연마의 보석 인 반면, 아무도 실질적으로 수년간 asyncore를 향상시키지 못했습니다. BTW, 질문을 편집하여 끝에 "2 개의 간단한 라인"을 추가하면 다른 사람들이 나중에 도움이 될 수 있습니까? 감사! –
+1 asyncore를 버려야합니다! –