web-dev-qa-db-fra.com

sérieusement simple python proxy HTTP?

J'ai cherché partout et trouvé des millions de serveurs proxy python mais aucun ne fait exactement ce que je voudrais (je pense: s)

J'ai eu un peu d'expérience avec python en général, mais je suis assez nouveau dans le monde des secrets sombres et profonds du protocole HTTP.

Ce que je pense pourrait être utile serait un exemple de proxy très simple auquel on peut se connecter et qui essaiera alors de se connecter à l'adresse qui lui est transmise.

De plus, je pense que ce qui m'a dérouté, c'est tout ce que les choses cachées font, par exemple si la classe hérite de BaseHTTPServer.BaseHTTPRequestHandler, que se passe-t-il précisément lorsqu'une page est demandée, comme dans la plupart des exemples que j'ai trouvés, il n'y a aucune référence à la variable de chemin, puis soudainement pouf! self.path est utilisé dans une fonction. je suppose qu'il a été hérité, mais comment se retrouve-t-il avec le chemin utilisé?

je suis désolé si cela n'a pas beaucoup de sens, car mon idée de mon problème est probablement brouillée :(

si vous pouvez penser à quelque chose qui rendrait ma question plus claire, veuillez suggérer de l'ajouter. xxx

Éditer:

En outre, un lien vers une explication des processus détaillés par lesquels le proxy traite la demande, demande la page (comment lire/modifier les données à ce stade) et la transmet au demandeur d'origine serait grandement apprécié xxxx

23
jma

"un exemple de proxy très simple auquel on peut se connecter et qui tentera alors de se connecter à l'adresse qui lui est transmise." C'est pratiquement la définition d'un proxy HTTP.

Il y a un vraiment exemple de proxy simple ici: http://effbot.org/librarybook/simplehttpserver.htm

Le noyau est composé de 3 lignes seulement:

class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.copyfile(urllib.urlopen(self.path), self.wfile)

C'est donc un SimpleHTTPRequestHandler qui, en réponse à une requête GET, ouvre l'URL dans le chemin (une requête à un proxy ressemble généralement à "GET http://example.com/ ", pas comme" GET /index.html "). Il copie ensuite tout ce qu'il peut lire de cette URL dans la réponse.

Notez que c'est vraiment minime. Je ne pense pas du tout aux en-têtes.

BTW: path est documenté à http://docs.python.org/library/basehttpserver.html . Il a été défini avant votre do* La méthode a été appelée.

31
Laurence Gonsalves

Du tord Wiki

from twisted.web import proxy, http
from twisted.internet import reactor
from twisted.python import log
import sys
log.startLogging(sys.stdout)

class ProxyFactory(http.HTTPFactory):
    protocol = proxy.Proxy

reactor.listenTCP(8080, ProxyFactory())
reactor.run()
14
sal

proxpy semble plutôt prometteur, il est très simple de modifier les demandes et les réponses.

4
Dima Tisnek