Usando Proxy

Python SELF ES
Nivel 24 , Lección 0
Disponible

6.1 ¿Por qué necesitas un proxy?

Ahora es un momento en el que cada país tiene su propia Internet. Ahora, no se prohíben usuarios individuales, sino sitios web completos, dominios, aplicaciones e incluso países. No es bueno. Pero si eres programador, eso no es un problema — en Internet hay muchos servidores proxy...

Un servidor proxy (o simplemente proxy) es un servidor intermedio que actúa como mediador entre el cliente (por ejemplo, tu computadora) y el servidor al que intentas acceder. El servidor proxy acepta solicitudes del cliente, las reenvía al servidor de destino, recibe respuestas y las envía de vuelta al cliente.

Cada producto grande tiene al menos varios servidores proxy que realizan varias funciones útiles. Por ejemplo, tales como:

  • Anonimización: Un servidor proxy puede ocultar la verdadera dirección IP del cliente, proporcionando acceso anónimo a los recursos de Internet. La dirección IP es un identificador único del dispositivo en la red, y ocultarla ayuda a mantener la confidencialidad del usuario.
  • Caché: Un servidor proxy puede almacenar en caché los recursos solicitados con frecuencia, lo que acelera el acceso a ellos y reduce la carga en los recursos de la red. Por ejemplo, si muchos usuarios solicitan la misma página web, el servidor proxy puede guardar una copia y entregarla directamente, sin acudir cada vez al servidor original.
  • Filtrado de contenido: Un servidor proxy puede bloquear el acceso a ciertos sitios web o tipos de contenido, proporcionando control y seguridad.
  • Evitar restricciones de acceso: Un servidor proxy puede ayudar a evadir las restricciones regionales de acceso al contenido, proporcionando acceso a recursos bloqueados en determinadas áreas geográficas.
  • Registro y monitoreo: Un servidor proxy puede llevar un registro de todas las solicitudes y respuestas, lo que permite el seguimiento y análisis del tráfico de la red.

Principio de funcionamiento de un servidor proxy

  • El cliente envía una solicitud: El dispositivo del cliente (por ejemplo, una computadora o un smartphone) envía una solicitud al servidor proxy.
  • El servidor proxy procesa la solicitud: El servidor proxy recibe la solicitud, puede modificarla (por ejemplo, agregar o eliminar encabezados) y la reenvía al servidor de destino.
  • El servidor de destino responde: El servidor de destino procesa la solicitud y envía la respuesta al servidor proxy.
  • El servidor proxy devuelve la respuesta al cliente: El servidor proxy recibe la respuesta del servidor de destino, puede almacenarla en caché para uso posterior y la envía al cliente.

Ventajas de usar un servidor proxy

  • Mejora de la seguridad: Un servidor proxy puede ocultar las redes internas del mundo exterior, reduciendo el riesgo de ataques.
  • Aceleración del acceso: El almacenamiento en caché de los recursos solicitados con frecuencia reduce el tiempo de acceso a ellos.
  • Control de acceso: Un servidor proxy puede restringir el acceso a ciertos sitios o tipos de contenido, proporcionando control sobre el uso de la red.
  • Reducción de la carga en la red: Gracias al almacenamiento en caché y filtrado del tráfico, los servidores proxy pueden reducir el volumen total de datos transmitidos y la carga en la red.

Muchos programas de servidor por razones de seguridad no tienen acceso directo a Internet. En su lugar, acceden a él a través de un proxy, y él ya tiene una lista de sitios y recursos permitidos. Así que tus programas también deben saber trabajar con proxies.

A pesar de todas las ventajas, el uso de servidores proxy también puede tener desventajas. Por ejemplo, esto puede llevar a una disminución en la velocidad de conexión, ya que las solicitudes pasan por un enlace adicional. Además, algunos sitios pueden bloquear el acceso desde servidores proxy conocidos.

6.2 Proxy y el módulo requests

La biblioteca requests admite el uso de servidores proxy a través del parámetro proxies.

HTTP (Hypertext Transfer Protocol) y HTTPS (HTTP Secure) son protocolos de transferencia de datos en Internet. HTTPS es una versión segura de HTTP. Se pueden utilizar diferentes servidores proxy para ellos, ya que pueden requerir diferentes tratamientos debido a las características de encriptación de HTTPS.

Ejemplo de uso de un proxy HTTP

Generalmente se pasa no solo un proxy, sino toda una lista. Esto es muy conveniente si algunos de los proxies son prohibidos o inaccesibles.

Ejemplo de llamada de la función requests.get() pasando la solicitud a través de un proxy.


import requests

# URL al que se realiza la solicitud
url = 'http://httpbin.org/ip'
            
# Configuración del servidor proxy
proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}
            
# Envío de una solicitud GET a través de un proxy
response = requests.get(url, proxies=proxies)
            
print(response.json())
        

Las solicitudes http irán a través del primer servidor proxy, y las https a través del segundo.

Ejemplo de uso de un proxy con autenticación

Muchos servidores proxy requieren autenticarse primero, y luego ya permiten su uso. Aquí entra en juego una cosa interesante…

Cuando se inventó la URL, se incorporó en el estándar de la URL que se puede pasar inmediatamente un usuario y contraseña al recurso. Se ve así:


http://user:password@domain/path

Por lo tanto, si el servidor proxy requiere autenticación, puedes incluir las credenciales en la URL.

Ejemplo:


import requests

# URL al que se realiza la solicitud
url = 'http://httpbin.org/ip'
            
# Configuración del servidor proxy con autenticación
proxies = {
    'http': 'http://user:password@10.10.1.10:3128',
    'https': 'http://user:password@10.10.1.10:1080',
}
            
# Envío de una solicitud GET a través de un proxy
response = requests.get(url, proxies=proxies)
            
print(response.json())
        

No he visto que se use esto en la práctica, pero si vas a iniciar tu propio servidor proxy de prueba, ¿por qué no?

Sin embargo, es importante señalar que pasar el usuario y la contraseña en la URL puede no ser seguro, ya que la URL puede guardarse en el historial del navegador o en los registros del servidor. En aplicaciones reales, se deben usar métodos de autenticación más seguros.

Es importante recordar almacenar de manera segura las credenciales para los servidores proxy en aplicaciones reales. Nunca guardes contraseñas en texto claro en el código o en archivos de configuración. En su lugar, utiliza variables de entorno o almacenamientos seguros de secretos.

6.3 Proxy y http.client

Para trabajar con servidores proxy en el módulo http.client es necesario configurar la conexión y los encabezados de solicitud manualmente.

Solo necesitas especificar el host y el puerto al crear la conexión.

Ejemplo:


# Configuración del servidor proxy
proxy_host = '10.10.1.10'
proxy_port = 3128
            
# Creación de la conexión con el servidor proxy
conn = http.client.HTTPConnection(proxy_host, proxy_port)
        

Luego necesitas establecer un túnel con el servidor proxy, y solo entonces enviarle la solicitud:


dest_url = 'httpbin.org'
dest_path = '/ip'
            
# Formación y envío de la solicitud
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
        

Para verificar si el servidor proxy está funcionando correctamente, puedes comparar tu dirección IP antes y después de usar el proxy. Para esto, puedes utilizar servicios que muestren tu dirección IP actual, por ejemplo, httpbin.org/ip.

Todo es muy "sencillo". Un ejemplo completo de uso de un proxy HTTP con http.client se verá así:


import http.client

# Configuración del servidor proxy
proxy_host = '10.10.1.10'
proxy_port = 3128
dest_url = 'httpbin.org'
dest_path = '/ip'
            
# Creación de la conexión con el servidor proxy
conn = http.client.HTTPConnection(proxy_host, proxy_port)
            
# Formación y envío de la solicitud
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
            
# Obtener la respuesta
response = conn.getresponse()
print(response.status, response.reason)
print(response.read().decode('utf-8'))
            
# Cierre de la conexión
conn.close()
        

¿Qué puedo decir? Usar el módulo requests será, por supuesto, más sencillo. ¡Pero! Muchos módulos y frameworks utilizan bajo el capó precisamente el http.client de bajo nivel. Necesitas saber cómo trabajar con él, para que puedas configurarlos adecuadamente.

A pesar de todas las ventajas, el uso de servidores proxy también puede tener desventajas. Por ejemplo, esto puede llevar a una disminución en la velocidad de conexión, ya que las solicitudes pasan por un enlace adicional. Además, algunos sitios pueden bloquear el acceso desde servidores proxy conocidos. Por lo tanto, al usar un proxy siempre debes considerar tanto sus ventajas como posibles limitaciones.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION