script - ¿Cómo escribir un servidor de grupo proxy(cuando llega una solicitud, elegir un proxy para obtener contenido de URL) en Python?
proxy python script (1)
No sé cuál es el nombre correcto para tal servidor proxy, le invitamos a corregir el título de mi pregunta.
Cuando busco un servidor proxy en Google, muchos implementos como maproxy o a-python-proxy-in-less-than-100-lines-of-code . Esos servidores proxy parecen simplemente pedirle al servidor remoto que obtenga una determinada dirección url.
Quiero crear un servidor proxy, que contiene un grupo de proxy (una lista de proxies http / https) y solo tengo una dirección IP y un puerto para atender las solicitudes entrantes. Cuando llega una solicitud, elige un proxy del grupo y hace esta solicitud, y devuelve el resultado.
Por ejemplo, tengo un VPS que IP ''192.168.1.66''. Comienzo el servidor proxy en este VPS con IP ''127.0.0.1'' y puerto ''8080''.
Entonces puedo usar este proxy como abajo.
import requests
url = ''http://www.google.com''
headers = {
...
}
proxies = {
''http'': ''http://192.168.1.66:8080''
}
r = requests.get(url, headers=headers, proxies=proxies)
He visto un cierto impulso como:
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()
Funciona, pero es tan simple que no tengo idea de cómo funciona y cómo mejorar este código para usar un grupo de servidores proxy.
Un ejemplo de flujo:
de hidu/proxy-manager , que escriben por golang.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ client (want visit http://www.baidu.com/) +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
| via proxy 127.0.0.1:8090
|
V
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ + proxy pool +
+ proxy manager listen ++++++++++++++++++++++++++++++++++
+ on (127.0.0.1:8090) + http_proxy1,http_proxy2, +
+ + socks5_proxy1,socks5_proxy2 +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
| choose one proxy visit
| www.baidu.com
|
V
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ site:www.baidu.com +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Su concepto de grupo de proxy no es difícil de implementar. Si entiendo correctamente, quieres hacer lo siguiente.
- SUS SERVIDORES DE PROXY escuchando solicitudes en 192.168.1.66:8080
- Solicitudes del CLIENTE para acceder a http://www.google.com
- SU SERVIDOR PROXY envía la solicitud del CLIENTE a OTRO SERVIDOR PROXY, que se encuentra en la lista de OTRO SERVIDOR PROXY - PISCINA PROXY.
- SU SERVIDOR PROXY obtiene respuesta de OTRO SERVIDOR PROXY y responde al CLIENTE
Entonces, he escrito un servidor proxy simple usando Flask y Requests .
from flask import Flask, Response
import random
app = Flask(__name__)
@app.route(''/p/<path:url>'')
def proxy(url):
""" Request to this like /p/www.google.com
"""
url = ''http://{}''.format(url)
r = get_response(url)
return Response(stream_with_context(r.iter_content()),
content_type=r.headers[''content-type''])
def get_proxy():
# This is your "Proxy Pool"
proxies = [
''http://proxy-server-1.com'',
''http://proxy-server-2.com'',
''http://proxy-server-3.com'',
]
return random.choice(proxies)
def get_response(target_url):
proxy = get_proxy();
url = "{}/p/{}".format(proxy, target_url)
# Above line will generate like http://proxy-server-1.com/p/www.google.com
return requests.get(url, stream=True)
if __name__ == ''__main__'':
app.run()
Entonces, puede comenzar aquí para mejorar su servidor proxy.
Common Proxy Pool
o Proxy Manager
pueden verificar la disponibilidad, la velocidad y más estadísticas de sus proxies, y seleccionar el mejor proxy para enviar la solicitud. Y, por supuesto, este ejemplo solo maneja solicitudes simples, y puede agregar funciones para manejar argumentos, métodos y protocolos de solicitudes.
Espero que esto sea útil!