import asyncore
class HTTPClient(asyncore.dispatcher):
def __init__(self, host, path):
asyncore.dispatcher.__init__(self)
self.create_socket()
self.connect( (host, 80) )
self.buffer = bytes('GET %s HTTP/1.0\r\nHost: %s\r\n\r\n' %
(path, host), 'ascii')
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:]
client = HTTPClient('www.bocaonews.com.br', '/')
asyncore.loop()
そして、エラーが発生しました:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "***.py", line 15, in __init__
self.connect( (host, 80) )
File "***\lib\asyncore.py", line 339, in connect
err = self.socket.connect_ex(address)
socket.gaierror: [Errno 11004] getaddrinfo failed
HTTP クライアントは、公式ドキュメントの例です。ホスト www.bocaonews.com.br にアクセスできないため、エラーが発生しました。
だから私の質問は、ホストが悪いときにクライアントが自動的に接続を閉じるようにコードを変更する方法ですか? ディスパッチャを生成する前にホストを調べることができます。しかし、それは効率が悪いです。