j'essaye de créer une connection client serveur avec l'api tornado_http2 mais le serveur ne reçoie pas les messages du client pour une raisonj que je ne comprend pas.
J'ai vérifié que le serveur est bien "en ligne" via firefox ou avec cette commande :
(mmsx-TPjM8MGB-py3.9) xx@ITLP071: 7 (master) ~/dev/mmsx/tornado_http2/demo$ proxy=127.0.0.1:8443; curl --http2-prior-knowledge -d "bla bla" -X POST https://localhost:8443/ -E test.crt
curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
La connection ne se déroule pas entiérement bien (pour une raison que je n'ai pas réussi à résoudre) mais au moins, le serveur réagit => un message est bien affiché sur le terminal du serveur :
Avec le client, il ne se passe rien, que ce soit du côté du client ou du serveur.
Je me suis inspiré du code de la démo et des tests de tornado_http2 (disponible ici : https://github.com/bdarnell/tornado_http2) mais malgré tout, ça ne fonctionne pas.
Un peu d'aide serait fortement apprécié.
Voici le code du serveur :
import logging
import os
import ssl
from tornado.ioloop import IOLoop
from tornado.options import parse_command_line
from tornado.web import Application, RequestHandler
from tornado_http2.server import Server
class MainHandler(RequestHandler):
def get(self):
self.write("Hello world")
def post(self):
self.write("bla bla")
def main():
parse_command_line()
ssl_ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
ssl_ctx.load_cert_chain(
os.path.join(os.path.dirname(__file__), 'test.crt'),
os.path.join(os.path.dirname(__file__), 'test.key'))
app = Application([('/hello', MainHandler)], debug=True)
server = Server(app, ssl_options=ssl_ctx)
port = 8443
address = "127.0.0.1"
server.listen(port, address)
logging.info("starting")
IOLoop.instance().start()
if __name__ == '__main__':
main()
et celui du client :
from tornado_http2.curl import CurlAsyncHTTP2Client as HTTP2Client
import asyncio
URI = "http:127.0.0.1:8443/hello"
class Test():
def __init__(self):
self.__client = HTTP2Client(force_instance=True)
async def send(self):
global URI
body = "body"
response = await self.__client.fetch(URI, method='POST', body=body,
validate_cert=False)
print(response)
def main():
asyncio.run(Test().send())
if __name__ == "__main__":
main()
Avec ce code, le serveur n'affiche rien d'autre que la trace initiale :
Je ne connais pas ce module mais en général on ne donne pas l'adresse dans le serveur. J'écrirais: address = "" # ou "localhost"
Et dans ton client, l'adresse est un peu bizarre: URI = "http:127.0.0.1:8443/hello" J'aurais écrit: URI = "http://127.0.0.1:8443/hello" bien que normalement le numéro du port soit placé entre le : et les //
- Edité par PierrotLeFou 22 juillet 2022 à 4:52:44
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.