Серьезно простой прокси-сервер python HTTP?
Я везде искал и нашел миллионы прокси-серверов python, но никто не делает точно, что мне хотелось бы (я думаю: s)
У меня был довольно большой опыт работы с python в целом, но я довольно новичок в мире глубоких темных секретов протокола HTTP.
То, что, по моему мнению, могло бы быть полезным, было бы очень простым прокси-примером, к которому можно подключиться, и сам попытается подключиться к адресу, переданному ему.
Кроме того, я думаю, что меня сбило с толку - это все, что скрывает скрытый материал. если класс наследует от BaseHTTPServer.BaseHTTPRequestHandler то, что точно происходит, когда запрашивается страница, как и во многих примерах, которые я нашел, нет ссылки на переменную пути, а затем вдруг poof! self.path используется в функции. im, предполагая, что он унаследован, но как он заканчивается с использованием пути?
Мне жаль, если это не имеет большого смысла, так как моя идея моей проблемы, вероятно, скремблирована: (
если вы можете думать о чем-либо, что сделает мой вопрос более ясным, пожалуйста, предложите добавить его. ххх
Edit:
Кроме того, ссылка на объяснение подробных процессов, через которые прокси обрабатывает запрос, запрашивает страницу (как читать/модифицировать данные в этой точке) и передает ее исходному реквестору, будет с большой благодарностью xxxx
Ответы
Ответ 1
"- очень простой пример прокси, к которому можно подключиться, и сам попытается подключиться к адресу, переданному ему." Это практически определение HTTP-прокси.
Здесь действительно простой пример прокси: http://effbot.org/librarybook/simplehttpserver.htm
Ядро всего 3 строки:
class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
self.copyfile(urllib.urlopen(self.path), self.wfile)
Итак, a SimpleHTTPRequestHandler
, который в ответ на запрос GET открывает URL-адрес в пути (запрос к прокси обычно выглядит как "GET http://example.com/", а не как "GET/index.html" ). Затем он просто копирует все, что он может прочитать из этого URL-адреса, в ответ.
Отметьте, что это действительно минимально. Думаю, что это не касается заголовков.
BTW: path
документируется на http://docs.python.org/library/basehttpserver.html. Он был установлен до того, как был вызван метод do*
.
Ответ 2
Из twisted 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()
Ответ 3
proxpy выглядит довольно многообещающим, он очень прост в настройке запросов и ответов.