2 votes

Erreur du serveur http tordu

Je utilise le module python twisted pour intercepter les en-têtes. J'ai le script suivant :

from twisted.web import proxy, http
from twisted.internet import reactor

g_port = 8080 #port pour l'écoute
g_request = () # action, params, method

class akaProxy(proxy.Proxy):

    def dataReceived(self, data):

        action = None
        params = None
        method = None
        global g_request

        headers = data.split("\n")
        requête = headers[0].split(" ")
        params = headers[len(headers)-1]

        method = requête[0].lower()
        action = requête[1].lower()

        print method, action

        return proxy.Proxy.dataReceived(self, data)

class ProxyFactory(http.HTTPFactory):
    protocol = akaProxy

factory = ProxyFactory()
reactor.listenTCP(g_port, factory)
reactor.run()

Lorsque je l'exécute en utilisant localproxy pour le navigateur web (cette URL) cela me donne cette erreur :

Unhandled Error
Traceback (most recent call last):
  File "test2.py", line 33, in 
    reactor.run()
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1169, in run
    self.mainLoop()
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1181, in mainLoop
    self.doIteration(t)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/pollreactor.py", line 167, in doPoll
    log.callWithLogger(selectable, _drdw, selectable, fd, event)
---  ---
  File "/usr/lib/python2.7/dist-packages/twisted/python/log.py", line 84, in callWithLogger
    return callWithContext({"system": lp}, func, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/python/log.py", line 69, in callWithContext
    return context.call({ILogContext: newCtx}, func, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line 118, in callWithContext
    return self.currentContext().callWithContext(ctx, func, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line 81, in callWithContext
    return func(*args,**kw)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/posixbase.py", line 599, in _doReadOrWrite
    self._disconnectSelectable(selectable, why, inRead)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/posixbase.py", line 260, in _disconnectSelectable
    selectable.readConnectionLost(f)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/tcp.py", line 257, in readConnectionLost
    self.connectionLost(reason)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/tcp.py", line 433, in connectionLost
    Connection.connectionLost(self, reason)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/tcp.py", line 277, in connectionLost
    protocol.connectionLost(reason)
  File "/usr/lib/python2.7/dist-packages/twisted/web/http.py", line 455, in connectionLost
    self.handleResponseEnd()
  File "/usr/lib/python2.7/dist-packages/twisted/web/proxy.py", line 88, in handleResponseEnd
    self.father.finish()
  File "/usr/lib/python2.7/dist-packages/twisted/web/http.py", line 866, in finish
    "Request.finish called on a request after its connection was lost; "
exceptions.RuntimeError: Request.finish called on a request after its connection was lost; use Request.notifyFinish to keep track of this.

Mais cela continue de fonctionner, est-ce que quelqu'un peut expliquer l'erreur et comment puis-je la corriger ?

1voto

the paul Points 5176

Ce message apparaît dans des situations tout comme il le décrit : vous avez du code qui traite les requêtes http, et la méthode finish de la requête n'a pas été appelée (pour une raison quelconque) jusqu'à ce que la connexion http soit perdue (ce qui signifie qu'il n'y a maintenant aucun moyen d'envoyer les résultats au demandeur).

Cela peut ne pas vous intéresser si cela se produit. Si ce n'est pas le cas, vous devriez faire quelque chose dans votre code pour éviter que la méthode Request.finish ne soit appelée lorsque l'attribut _disconnected de votre requête est vrai. Sinon, ignorez simplement l'erreur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X