Conexiones a Paginas Web a través de servidores Proxy

Introducción:

Hola compañeros de Mi Diario Python, mi nombre es Luis  y es un placer estar nuevamente aquí con ustedes.

En el día de hoy me enfocare en describirles lo que es un servidor proxy. Al final realizaremos una prueba utilizando Python y urllib.

Antes de comenzar quiero recordarte que en Mi Diario Python puedes encontrar muchos articulos para reforzar tus conocimientos y Aprender Python.

Servidor Proxy:

Un servidor proxy, es aquel que hace de intermediario en las peticiones de recursos que realiza un cliente a otro servidor.

Por ejemplo, si una persona hace una petición desde una maquina (A) hacia un servidor (C), lo hará que hará sera enviar esa petición al servidor proxy, el cual enviara esa misma petición al servidor (C). Esto hará que el servidor (C) no sepa que la maquina (A) fue la que envió esta petición. En conclusión, el servidor pensara que ha sido otro el que envió esa petición.

Este tipo de procedimientos son muy utilizados para navegar anonimamente. Un ejemplo muy claro del uso de servidores proxy es el navegador TOR, el cual con cada nueva sesión se hace una conexión a un servidor nuevo mostrando que nuestra localidad es otra.

¿Que uso podemos darle a esto? El uso más común que se le da a los servidores proxy es la navegación anonima, ya que con esta una persona de un país cuyo pagina X esta bloqueada en su país, podra utilizar un servidor proxy que las peticiones las haga un servidor proxy y de esta manera poder tener acceso a esta pagina.

Imagen relacionada


Un ejemplo sencillo:
A continuación realizaremos un ejemplo muy sencillo el cual sera un script escrito en Python que hará peticiones a servidores web a través de un servidor proxy.

Lo primero que debemos tener a la mano, sera el servidor proxy que utilizaremos. 
Esto lo podemos obtener desde la pagina: https://hidemy.name/es/proxy-list/.

Esta pagina se actualiza constantemente, po lo que es poco probable que les muestro los mismo servidores de la imagen. Como pueden observar, la lista es muy larga, y contiene servidores de todas partes del mundo. Lo que ocuparemos sera, la dirección ip, el puerto y el tipo de protocolo que utiliza. Ya que tengamos esto, podemos proseguir con el ejemplo:

import urllib.request
proxies = {'http': 'http://190.242.119.194:3128'}

opener = urllib.request.FancyURLopener(proxies)

with opener.open("http://www.python.org") as f:
    print(f.read().decode('utf-8'))


Lo primero que hacemos es importar  urllib.request para hacer peticiones a servidores web. Luego creamos un diccionario con el protocolo del servidor web y la dirección ip del servidor seguido de dos puntos y el puerto del servidor. Como pueden obsera, al principio de la ip he colocado el protocolo nuevamente, esto es necesario.

Luego crearmos una conexión con el método FancyURLopener pasando como argumento el diccionario. Luego de esto hacemos una petición a los servidores de http://www.python.org pasando como intermediario a opener. Por ultimo leemos el resultado, el cual sera el cuerpo HTML de la pagina.

<!doctype html>
<!--[if lt IE 7]>   <html class="no-js ie6 lt-ie7 lt-ie8 lt-ie9">   <![endif]-->
<!--[if IE 7]>      <html class="no-js ie7 lt-ie8 lt-ie9">          <![endif]-->
<!--[if IE 8]>      <html class="no-js ie8 lt-ie9">                 <![endif]-->
<!--[if gt IE 8]><!--><html class="no-js" lang="en" dir="ltr">  <!--<![endif]-->

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <link rel="prefetch" href="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js">

    <meta name="application-name" content="Python.org">
    <meta name="msapplication-tooltip" content="The official home of the Python Programming Language">
    <meta name="apple-mobile-web-app-title" content="Python.org">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="HandheldFriendly" content="True">
    <meta name="format-detection" content="telephone=no">
    <meta http-equiv="cleartype" content="on">
    <meta http-equiv="imagetoolbar" content="false">

    <script src="/static/js/libs/modernizr.js"></script>

    <link href="/static/stylesheets/style.css" rel="stylesheet" type="text/css" title="default" />
    <link href="/static/stylesheets/mq.css" rel="stylesheet" type="text/css" media="not print, braille, embossed, speech, tty" />
    

    <!--[if (lte IE 8)&(!IEMobile)]>
    <link href="/static/stylesheets/no-mq.css" rel="stylesheet" type="text/css" media="screen" />
    
    
    <![endif]-->

    
    <link rel="icon" type="image/x-icon" href="/static/favicon.ico">
    <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/static/apple-touch-icon-144x144-precomposed.png">
    <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/static/apple-touch-icon-114x114-precomposed.png">
    <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/static/apple-touch-icon-72x72-precomposed.png">
    <link rel="apple-touch-icon-precomposed" href="/static/apple-touch-icon-precomposed.png">
    <link rel="apple-touch-icon" href="/static/apple-touch-icon-precomposed.png">

    
    <meta name="msapplication-TileImage" content="/static/metro-icon-144x144-precomposed.png"><!-- white shape -->
    <meta name="msapplication-TileColor" content="#3673a5"><!-- python blue -->
    <meta name="msapplication-navbutton-color" content="#3673a5">

    <title>Welcome to Python.org</title>

Algo así seria el resultado, más largo, y que seria toda la pagina.

Como pueden ver, es muy fácil poder utilizar servidores proxy con Python urllib, ya queda de tu parte darle un buen uso.

¿Alguna duda? ¿Alguna sugerencia? No olvides dejar tu comentario.

Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey