CodeGym /Cursos /Python SELF PT /Usando Proxy

Usando Proxy

Python SELF PT
Nível 24 , Lição 0
Disponível

6.1 Por que você precisa de proxy?

Agora é uma época em que cada país tem sua própria versão da internet. Hoje em dia, não são apenas usuários individuais que são bloqueados, mas sites inteiros, domínios, aplicativos e até países. Não é legal. Mas se você é programador, isso não é problema — a internet está cheia de servidores proxy...

Servidor proxy (ou apenas proxy) — é um servidor intermediário que atua como um mediador entre o cliente (por exemplo, seu computador) e o servidor ao qual você está tentando acessar. O servidor proxy recebe solicitações do cliente, as encaminha para o servidor de destino, recebe as respostas e as envia de volta para o cliente.

Cada grande produto tem pelo menos alguns servidores proxy que executam várias funções úteis. Por exemplo, tais como:

  • Anonimização: O servidor proxy pode esconder o endereço IP real do cliente, proporcionando acesso anônimo aos recursos da internet. O endereço IP é um identificador único do dispositivo na rede, e escondê-lo ajuda a preservar a privacidade do usuário.
  • Cache: O servidor proxy pode armazenar em cache recursos frequentemente solicitados, o que acelera o acesso a eles e reduz a carga sobre os recursos de rede. Por exemplo, se muitos usuários solicitam a mesma página da web, o servidor proxy pode salvar uma cópia dela e fornecê-la diretamente, sem acessar o servidor de origem cada vez.
  • Filtragem de conteúdo: O servidor proxy pode bloquear o acesso a determinados sites ou tipos de conteúdo, garantindo controle e segurança.
  • Superação de restrições de acesso: O servidor proxy pode ajudar a contornar restrições regionais de acesso a conteúdo, fornecendo acesso a recursos bloqueados em determinadas áreas geográficas.
  • Registro e monitoramento: O servidor proxy pode manter um log de todas as solicitações e respostas, permitindo rastrear e analisar o tráfego de rede.

Como funciona um servidor proxy

  • O cliente envia uma solicitação: O dispositivo cliente (por exemplo, computador ou smartphone) envia uma solicitação para o servidor proxy.
  • O servidor proxy processa a solicitação: O servidor proxy recebe a solicitação, pode modificá-la (por exemplo, adicionar ou remover cabeçalhos) e encaminhá-la para o servidor de destino.
  • O servidor de destino responde: O servidor de destino processa a solicitação e envia a resposta para o servidor proxy.
  • O servidor proxy retorna a resposta ao cliente: O servidor proxy recebe a resposta do servidor de destino, pode armazená-la em cache para uso posterior e enviá-la ao cliente.

Vantagens de usar um servidor proxy

  • Melhoria da segurança: O servidor proxy pode esconder redes internas do mundo exterior, reduzindo o risco de ataques.
  • Aceleração do acesso: O cache de recursos frequentemente solicitados reduz o tempo de acesso a eles.
  • Controle de acesso: O servidor proxy pode restringir o acesso a determinados sites ou tipos de conteúdo, garantindo controle sobre o uso da rede.
  • Redução da carga na rede: Com o cache e a filtragem de tráfego, os servidores proxy podem reduzir o volume total de dados transmitidos e a carga na rede.

Muitos programas de servidor, por segurança, não têm acesso direto à internet. Em vez disso, eles se conectam por meio de um proxy, que já possui uma lista de sites e recursos permitidos. Então, seus programas também devem ser capazes de trabalhar com proxy.

Apesar de todas as vantagens, o uso de servidores proxy pode ter desvantagens. Por exemplo, isso pode levar a uma diminuição na velocidade de conexão, pois as solicitações passam por um estágio adicional. Além disso, alguns sites podem bloquear o acesso a servidores proxy conhecidos.

6.2 Proxy e o módulo requests

A biblioteca requests suporta o uso de servidores proxy através do parâmetro proxies.

HTTP (Hypertext Transfer Protocol) e HTTPS (HTTP Secure) são protocolos de transmissão de dados na internet. HTTPS é uma versão segura do HTTP. Eles podem usar diferentes servidores proxy, pois podem exigir diferentes tratamentos devido às características de criptografia do HTTPS.

Exemplo de uso de proxy HTTP

Normalmente se passa não apenas um proxy, mas uma lista inteira deles. Isso é muito conveniente, caso alguns dos proxies sejam banidos ou indisponíveis.

Exemplo de chamada da função requests.get() com envio de requisição através de proxy.


import requests

# URL para a qual a requisição é feita
url = 'http://httpbin.org/ip'
            
# Configurações do servidor proxy
proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}
            
# Enviando requisição GET através do proxy
response = requests.get(url, proxies=proxies)
            
print(response.json())
        

Requisições http irão através do primeiro servidor proxy, enquanto https irá através do segundo.

Exemplo de uso de proxy com autenticação

Muitos servidores proxy exigem autenticação primeiro, antes de permitir que você os use. Uma solução interessante vem em nosso auxílio...

Quando URLs foram originalmente criadas, foi incluído no padrão que você pode passar imediatamente o login e a senha para o recurso na URL. Isso se parece com:


http://user:password@domain/path

Então, se o servidor proxy exigir autenticação, você pode incluir dados de login na URL.

Exemplo:


import requests

# URL para a qual a requisição é feita
url = 'http://httpbin.org/ip'
            
# Configurações do servidor proxy com autenticação
proxies = {
    'http': 'http://user:password@10.10.1.10:3128',
    'https': 'http://user:password@10.10.1.10:1080',
}
            
# Enviando requisição GET através do proxy
response = requests.get(url, proxies=proxies)
            
print(response.json())
        

Eu não vi isso ser usado na prática, mas se você estiver configurando seu próprio servidor proxy para testes, por que não?

No entanto, vale a pena notar que passar login e senha na URL pode não ser seguro, já que a URL pode ser salva no histórico do navegador ou nos logs do servidor. Em aplicações reais, devem ser usados métodos de autenticação mais seguros.

É importante lembrar de armazenar credenciais de proxy com segurança em aplicativos reais. Nunca armazene senhas em texto claro no código ou em arquivos de configuração. Em vez disso, use variáveis de ambiente ou repositórios seguros de segredos.

6.3 Proxy e http.client

Para trabalhar com servidores proxy no módulo http.client é necessário configurar manualmente a conexão e os cabeçalhos da requisição.

Você só precisa especificar host e porta ao criar a conexão.

Exemplo:


# Configurações do servidor proxy
proxy_host = '10.10.1.10'
proxy_port = 3128
            
# Criando conexão com o servidor proxy
conn = http.client.HTTPConnection(proxy_host, proxy_port)
        

Em seguida, você precisa estabelecer um túnel com o servidor proxy, e só então enviar a ele a solicitação:


dest_url = 'httpbin.org'
dest_path = '/ip'
            
# Formando e enviando a solicitação
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
        

Para verificar se o servidor proxy está funcionando corretamente, você pode comparar seu endereço IP antes e depois de usar o proxy. Para isso, você pode usar serviços que mostram seu endereço IP atual, como httpbin.org/ip.

Tudo muito "simples". Um exemplo completo de uso de proxy HTTP com http.client será assim:


import http.client

# Configurações do servidor proxy
proxy_host = '10.10.1.10'
proxy_port = 3128
dest_url = 'httpbin.org'
dest_path = '/ip'
            
# Criando conexão com o servidor proxy
conn = http.client.HTTPConnection(proxy_host, proxy_port)
            
# Formando e enviando a solicitação
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
            
# Obtendo a resposta
response = conn.getresponse()
print(response.status, response.reason)
print(response.read().decode('utf-8'))
            
# Fechando a conexão
conn.close()
        

O que dizer? Usar o módulo requests é, claro, um pouco mais fácil. Mas! Muitos módulos e frameworks usam embaixo dos panos o http.client de baixo nível. Você precisa saber como trabalhar com ele, para que possa configurar corretamente o funcionamento deles.

Apesar de todas as vantagens, o uso de servidores proxy pode ter desvantagens. Por exemplo, isso pode levar a uma diminuição na velocidade de conexão, pois as solicitações passam por um estágio adicional. Além disso, alguns sites podem bloquear o acesso a servidores proxy conhecidos. Portanto, ao usar proxy, sempre considere tanto suas vantagens quanto as possíveis limitações.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION