Como usar cURL com proxy: Guia completo
Muitas das ações que realizamos na internet costumam ser feitas através do navegador: ler sites, baixar arquivos, preencher formulários ou enviar dados. Mas você sabia que tudo isso pode ser feito de forma mais rápida diretamente pelo terminal? Uma das melhores ferramentas para isso é o cURL.
O cURL oferece mais controle e praticidade quando é necessário processar múltiplas requisições ou manipular dados. E ao utilizá-lo com um proxy, as possibilidades se expandem ainda mais: é possível contornar restrições e manter o anonimato.
Neste artigo, vamos mostrar como o cURL pode ser usado para baixar arquivos, enviar requisições e trabalhar com proxies para evitar bloqueios e proteger sua privacidade. Além disso, explicaremos como aplicar o cURL para web scraping e evitar erros. Exemplos práticos e dicas úteis esperam por você a seguir!
O cURL (Client URL) é uma ferramenta baseada na biblioteca libcurl que permite enviar e receber dados pela internet. Ele funciona diretamente no terminal e suporta diversos protocolos, como HTTP e HTTPS para interagir com páginas da web, FTP para transferência de arquivos, entre outros.
Com o cURL, você pode realizar diversas tarefas, como:
- Baixar arquivos da internet.
- Enviar dados para um servidor.
- Interagir com sites e APIs.
- Usar proxies para garantir anonimato ou contornar bloqueios.
O cURL ajuda a automatizar tarefas repetitivas de forma rápida e prática, especialmente quando há necessidade de executar várias requisições ou operações. Ele é amplamente utilizado para testes, web scraping e integração com serviços que exigem transferência de dados via internet. Trata-se de uma ferramenta poderosa tanto para desenvolvedores e administradores de sistemas quanto para qualquer usuário que precise interagir com recursos online diretamente do terminal ou por meio de scripts.
Um proxy (ou servidor proxy) é um intermediário entre seu dispositivo e a internet. Quando você deseja acessar um site, seu pedido é enviado primeiro ao proxy, que o redireciona para o servidor desejado e retorna a resposta para você. Isso permite interagir com a internet de uma forma um pouco diferente.
Aqui estão algumas razões para usar servidores proxy:
Ocultar seu endereço IP
O proxy pode esconder seu endereço IP real, fazendo com que os sites vejam o IP do servidor proxy em vez do seu. Isso ajuda a aumentar seu anonimato online.
Contornar restrições
Às vezes, os recursos da internet limitam o acesso por região. Com um proxy, você pode contornar essas restrições e acessar conteúdos que normalmente estariam bloqueados no seu país.
Acelerar o desempenho
Alguns servidores proxy podem armazenar (cachar) dados, o que ajuda a acelerar o carregamento de sites que você visita com frequência.
Filtragem de conteúdo
O proxy pode ser configurado para bloquear sites indesejados ou protegê-lo contra vírus e outras ameaças.
Segurança adicional
O proxy ajuda a se proteger contra sites maliciosos e ataques de phishing, fornecendo uma camada extra de segurança.
Existem diferentes tipos de proxies — HTTP, HTTPS, SOCKS e outros. Cada tipo de proxy tem suas características e formas de aplicação dependendo das suas necessidades. O HTTP é usado para solicitações web comuns, o HTTPS é para conexões seguras e criptografadas, e o SOCKS é um proxy universal que pode transmitir qualquer tipo de tráfego, incluindo HTTP e HTTPS. Vamos explorar mais detalhadamente sobre eles na próxima seção.
A escolha do proxy depende dos seus objetivos, tarefas e exigências em relação ao desempenho ou anonimato. Vamos analisar os principais tipos de proxies e para que são mais adequados:
Proxy HTTP/HTTPS
O proxy HTTP funciona apenas com os protocolos HTTP/HTTPS, oferece criptografia adicional, o que o torna mais seguro.
É amplamente suportado pela maioria das ferramentas e programas. É ideal para web scraping e outras tarefas que exigem automação.
Proxy SOCKS (SOCKS4 e SOCKS5)
O SOCKS5 suporta tráfego tanto TCP quanto UDP.
Opera em um nível mais baixo do que o proxy HTTP, o que o torna mais versátil para qualquer protocolo.
O proxy SOCKS não processa cabeçalhos, o que aumenta o anonimato.
Para tarefas em que a alta anonimidade ou o trabalho com protocolos não convencionais são importantes, o melhor é usar o SOCKS5.
Proxies gratuitos
Proxies gratuitos geralmente são lentos, instáveis e bloqueados rapidamente.
Podem colocar seus dados em risco, pois nem sempre garantem segurança.
São uma opção comum para testes ou aprendizado, mas não são recomendados para projetos grandes.
Proxies de Data Center
Usam endereços IP pertencentes a data centers, e não a provedores de internet.
São mais rápidos e mais baratos em comparação com proxies residenciais, mas mais fáceis de detectar por sites, já que seus IPs geralmente são agrupados e têm características semelhantes.
Proxies Residenciais
Usam endereços IP reais, pertencentes a provedores de internet.
São mais difíceis de detectar por sites em comparação com proxies de data center.
Para trabalhar com sites que bloqueiam proxies comuns, proxies residenciais ajudam você a se parecer com um usuário comum.
Proxies Móveis
Os endereços IP são vinculados a operadoras móveis.
É muito difícil bloquear ou detectar. Normalmente, são mais caros do que outros tipos de proxies.
Se você trabalha com sites que exigem tráfego móvel ou possuem sistemas avançados anti-bot, os proxies móveis são indispensáveis.
A rotação de proxies ajuda a evitar bloqueios e aumenta o anonimato. Ela permite alterar dinamicamente os endereços IP a partir dos quais os pedidos são feitos, o que reduz o risco de bloqueios devido a múltiplos pedidos de um único IP.
Como configurar a rotação de proxies com cURL:
- Usando API para obter proxies:
Vários serviços especializados (como ProxyMesh) oferecem uma API para obter proxies (neste exemplo, você precisa substituir "your_username" e "your_password" pelo seu login e senha reais fornecidos pelo serviço ProxyMesh):
PROXY=$(curl -s 'https://proxy.proxyMesh.com/api/proxy?username=your_username&password=your_password')
curl -x $PROXY http://example.com/ip
- Usando uma lista de proxies:
Suponha que você tenha uma lista de proxies, por exemplo, de serviços públicos ou pagos. Exemplo com múltiplos proxies:
proxies=("http://123.45.67.89:8080" "http://98.76.54.32:8080" "http://165.178.0.1:8080")
PROXY=${proxies[$RANDOM % ${#proxies[@]}]}
curl -x $PROXY http://example.com/ip
- Usando o cURL em projetos mais complexos:
Se você estiver usando cURL em um projeto mais complexo, para rotação de proxies em sistemas Unix, pode usar ferramentas ou bibliotecas de terceiros, como o proxychains: instale o proxychains e configure o arquivo /etc/proxychains.conf para rotação automática.
proxychains curl http://example.com
O cURL suporta uma ampla gama de protocolos, permitindo trabalhar com diferentes tipos de conexões de rede. Dependendo das suas necessidades, você pode escolher o protocolo adequado e usá-lo com comandos convenientes na linha de comando. Aqui está uma visão geral dos principais protocolos que podem ser usados com cURL:
HTTP (HyperText Transfer Protocol)
Um dos protocolos mais populares para transferência de dados na internet. Ele é utilizado para troca de dados entre o cliente (como um navegador) e o servidor.
Exemplo de uso:
curl http://example.com
Porta padrão: 80
HTTPS (HyperText Transfer Protocol Secure)
Versão segura do HTTP, que utiliza SSL/TLS para criptografar os dados e proteger contra ataques do tipo "man-in-the-middle".
Exemplo de uso:
curl https://example.com
Porta padrão: 443
SOCKS (Socket Secure)
Protocolo de proxy que permite transmitir qualquer tipo de dado pela internet, incluindo HTTP, FTP e outros protocolos, funcionando no nível de sockets.
Exemplo de uso:
curl --proxy socks5://proxy_host:proxy_port http://example.com
Porta padrão: 1080
FTP (File Transfer Protocol)
Protocolo para transferência de arquivos entre cliente e servidor. Ele não criptografa os dados transmitidos.
Exemplo de uso:
curl ftp://example.com/file.txt
Porta padrão: 21
FTPS (FTP Secure)
Extensão do FTP que adiciona criptografia usando SSL/TLS para proteger os dados transmitidos.
Exemplo de uso:
curl ftps://example.com/file.txt
Porta padrão: 990 (para FTPS implícito) ou 21 (para FTPS explícito)
SFTP (SSH File Transfer Protocol)
Protocolo de transferência de arquivos que utiliza SSH para criptografar e garantir a segurança dos dados.
Exemplo de uso:
curl sftp://example.com/file.txt
Porta padrão: 22
LDAP (Lightweight Directory Access Protocol)
Protocolo para acesso e gerenciamento de serviços de diretórios, como Active Directory ou OpenLDAP.
Exemplo de uso:
curl ldap://example.com
Porta padrão: 389
POP3 (Post Office Protocol)
Protocolo para recebimento de e-mails de um servidor de correio.
Exemplo de uso:
curl pop3://pop.example.com
Porta padrão: 110
IMAP (Internet Message Access Protocol)
Protocolo para acesso e gerenciamento de e-mails no servidor.
Exemplo de uso:
curl imap://imap.example.com
Porta padrão: 143
W Windows, macOS i Linux cURL jest już preinstalowany. Możesz to sprawdzić za pomocą poniższej komendy w terminalu (dla Windows użyj cmd lub PowerShell):
curl --version
W odpowiedzi powinna pojawić się informacja o wersji cURL i libcurl oraz dodatkowo o obsługiwanych protokołach i funkcjach. Jeśli zamiast tego pojawi się komunikat o błędzie, na przykład:
Linux/macOS: command not found
Windows: 'curl' is not recognized as an internal or external command
Oznacza to, że cURL nie jest zainstalowany lub nie został dodany do zmiennych środowiskowych. W takim przypadku należy zainstalować cURL ręcznie dla swojego systemu operacyjnego:
Windows
Pobierz gotowy archiwum z curl.exe ze strony oficjalnej.
Wypakuj archiwum i dodaj ścieżkę do curl.exe do zmiennych środowiskowych PATH.
Lub użyj winget:
winget install curl
macOS
Aby zaktualizować lub zainstalować, użyj Homebrew:
brew install curl
Linux
Ubuntu/Debian:
sudo apt update
sudo apt install curl
Fedora/RHEL/CentOS:
sudo dnf install curl # Fedora
sudo yum install curl # CentOS/RHEL
Arch Linux:
sudo pacman -S curl
Vamos explorar os comandos que cobrem as principais opções de uso do cURL — download de dados, execução de requisições e gerenciamento de arquivos:
Obter o conteúdo da página (requisição GET):
curl http://example.com
Esse comando é usado para obter o conteúdo de uma página da web. O cURL faz uma requisição ao URL especificado e exibe o resultado na tela (geralmente o código HTML da página). Isso é útil para coletar informações de sites, escanear conteúdo ou testar a disponibilidade de recursos web.
Requisição POST (usada para enviar dados ao servidor, como ao enviar formulários):
curl -X POST -d "param1=value1¶m2=value2" https://example.com
- -X POST especifica o método de requisição POST.
- -d permite especificar os dados que são enviados ao servidor.
Exemplo com um site real:
curl -X POST -d "name=JohnDoe&[email protected]" https://httpbin.org/post
Parâmetros adicionais para requisição POST:
Usando cabeçalhos com -H:
curl -X POST -d "param1=value1" -H "Content-Type: application/x-www-form-urlencoded" https://example.com
Enviando dados JSON:
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' https://example.com
Download de arquivo a partir de uma URL (usando o site de teste https://www.sample-videos.com):
Para baixar e salvar o arquivo na pasta de trabalho atual, basta usar o comando com a opção -O (letra maiúscula), que salva o arquivo com o nome especificado na URL.
curl https://www.sample-videos.com/img/Sample-jpg-image-50kb.jpg -O
Se precisar baixar o arquivo em uma pasta específica, adicione o caminho usando a opção -o (letra minúscula):
Windows:
curl -o "C:\Users\UserName\Pictures\Sample-jpg-image-50kb.jpg" https://www.sample-videos.com/img/Sample-jpg-image-50kb.jpg
Linux/MacOS:
curl -o "/Users/UserName/Pictures/Sample-jpg-image-50kb.jpg" https://www.sample-videos.com/img/Sample-jpg-image-50kb.jpg
Verificação dos cabeçalhos de resposta:
curl -I http://example.com
Esse comando retorna apenas os cabeçalhos de resposta do servidor, sem o corpo da resposta. A flag -I (ou --head) permite ver as metainformações sobre a página (como o código de status HTTP, tipo de conteúdo, data e hora da última atualização). Isso é útil para diagnóstico ou para verificar a disponibilidade do recurso.
Autenticação usando nome de usuário e senha em um site real com curl:
curl -u username:password https://example.com
Exemplo com site real:
curl -u demo:password123 https://httpbin.org/basic-auth/demo/password123
A opção --header (ou sua forma curta -H) no cURL é usada para adicionar cabeçalhos HTTP às requisições. Permite enviar cabeçalhos adicionais que podem ser exigidos pelo servidor.
Por exemplo, é possível adicionar o cabeçalho User-Agent:
curl --header "User-Agent: Mozilla/5.0" https://example.com
Ou configurar a autenticação utilizando cabeçalhos:
curl --header "Authorization: Bearer your_token_here" https://api.example.com
Para ver todos os comandos disponíveis e suas descrições, use o comando:
curl --help all
Invoke-WebRequest é um cmdlet do PowerShell usado para fazer requisições HTTP, como o download de páginas da web, envio de dados ou download de arquivos. Ele permite trabalhar com conteúdo da web diretamente da linha de comando, mas não é uma substituição completa do cURL, pois tem funcionalidades e sintaxe mais limitadas.
Anteriormente, no PowerShell, o comando curl era um alias para Invoke-WebRequest, o que muitas vezes confundia os usuários que esperavam que o comando executasse a ferramenta padrão cURL.
Nas versões mais antigas (Windows 10 e Windows 11), a Microsoft adicionou o curl.exe — uma versão completa do cURL, semelhante à disponível no Linux e no macOS. No entanto, no PowerShell, o comando curl às vezes ainda pode acionar o Invoke-WebRequest. Para evitar isso, pode-se usar o cmd em vez do PowerShell, ou remover o alias curl com o comando Remove-Alias curl, para garantir que o comando curl chame diretamente o curl.exe. Alternativamente, você pode especificar explicitamente o curl.exe:
curl.exe https://example.com
Praca z serwerami proxy w cURL zapewnia anonimowość, omija blokady i zwiększa bezpieczeństwo podczas interakcji z zasobami internetowymi. Znajomość podstawowych komend i parametrów pozwala efektywnie skonfigurować pracę z proxy w różnych scenariuszach.
Używanie proxy HTTP i HTTPS
Aby używać proxy HTTP/HTTPS, można określić serwer proxy za pomocą parametru -x lub --proxy:
Proxy HTTP:
curl -x http://123.456.789.012:8080 https://example.com
Proxy HTTPS:
curl -x https://123.456.789.012:8080 https://example.com
Używanie proxy SOCKS
Proxy SOCKS (SOCKS4 lub SOCKS5) obsługuje nie tylko HTTP i HTTPS, ale także inne protokoły.
Przykład dla proxy SOCKS5:
curl -x socks5://123.456.789.012:1080 https://httpbin.org/ip
Przykład dla proxy SOCKS4:
curl -x socks4://123.456.789.012:1080 https://httpbin.org/ip
Autoryzacja w proxy
Czasami serwery proxy wymagają autoryzacji. Aby podać nazwę użytkownika i hasło do proxy, użyj parametru -U lub --proxy-user.
curl -x http://123.456.789.012:8080 -U testuser:testpassword https://httpbin.org/ip
Używanie proxy z różnymi protokołami
cURL pozwala na używanie różnych typów proxy dla różnych protokołów. Na przykład możesz używać SOCKS5 dla zapytań HTTP, a proxy HTTPS dla połączeń szyfrowanych.
curl -x socks5://123.456.789.012:1080 -U testuser:testpassword https://httpbin.org/ip
To zapytanie użyje proxy SOCKS5 do obsługi zapytań HTTP, a dane będą przesyłane przez zabezpieczony HTTPS.
Sprawdzanie adresu IP przez proxy
Aby sprawdzić, czy zapytanie rzeczywiście przechodzi przez proxy, możesz użyć httpbin.org do uzyskania aktualnego adresu IP:
curl -x http://123.456.789.012:3128 http://httpbin.org/ip
Sprawdzanie prędkości proxy
Aby zmierzyć prędkość proxy w cURL, możesz użyć flagi -w (write-out) do uzyskania prędkości pobierania danych (%{speed_download}). Flaga -o /dev/null jest używana do ignorowania wyjścia zawartości, a -s sprawia, że komenda jest "cicha":
curl -x http://123.456.789.012:3128 -o /dev/null -s -w "Prędkość pobierania: %{speed_download} bajtów/sek\n" https://httpbin.org/bytes/102400
Używanie proxy z nagłówkami User-Agent
Czasami trzeba zmienić nagłówek User-Agent podczas korzystania z proxy.
curl -x http://123.456.789.012:3128 -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" http://httpbin.org/headers
Używanie proxy tylko dla określonych zapytań
Możesz określić, które zapytania powinny przechodzić przez proxy. Na przykład, używać proxy tylko dla określonych domen. Opcja --noproxy pozwala wskazać domeny, które będą omijały proxy:
curl --proxy http://123.456.789.012:8080 --noproxy example.com http://httpbin.org/ip
Para facilitar o uso de proxy no cURL, é possível configurar variáveis de ambiente. Isso permite automatizar as conexões proxy, evitando a necessidade de especificar os parâmetros na linha de comando a cada vez.
Exemplo de uso de variáveis de ambiente com cURL:
Linux/macOS: No Linux e macOS, os proxies são configurados no terminal usando o comando export.
Exemplo de configuração da variável para proxy HTTP:
export http_proxy=http://123.456.789.012:8080
Para proxy HTTPS:
export https_proxy=https://123.456.789.012:8080
Windows: No Windows, as variáveis de ambiente podem ser definidas através do prompt de comando:
set http_proxy=http://123.456.789.012:8080
set https_proxy=https://123.456.789.012:8080
Após isso, é possível usar o cURL, que automaticamente usará o proxy configurado:
curl https://example.com
Para usar o valor de uma variável de ambiente em comandos ou scripts no Linux/macOS, pode-se usar o sinal $. Ele permite acessar o valor da variável. Exemplo:
curl -x $http_proxy https://example.com
Para acessar o valor de uma variável de ambiente no Windows, utiliza-se a sintaxe com os sinais de porcentagem %. Exemplo:
curl -x %http_proxy% https://example.com
Configurar corretamente a segurança das conexões ao trabalhar com proxies ajuda a prevenir vazamento de dados e aumenta a proteção das suas conexões na rede.
Uso da opção -k ou --insecure: Essa opção permite ignorar erros de certificados SSL, o que é útil caso o seu proxy utilize um certificado autoassinado:
curl -x https://123.456.789.012:8080 -k https://example.com
Verificação de certificados: Para evitar riscos ao conectar via proxy HTTPS, é importante usar os certificados corretos. Se você tiver um arquivo de certificado, use a opção --cacert:
curl -x https://123.456.789.012:8080 --cacert /path/to/certificate.crt https://example.com
Se você tiver vários certificados, pode especificar o diretório com os certificados confiáveis usando a opção --capath. Isso é útil caso precise trabalhar com vários certificados:
curl -x https://123.456.789.012:8080 --capath /path/to/certificates/ https://example.com
Os apelidos (ou aliases) no cURL são comandos abreviados para parâmetros usados com frequência, que tornam o uso do cURL mais conveniente e rápido. Em vez de digitar comandos longos a cada vez, você pode criar apelidos para operações repetitivas.
Por que usar apelidos?
- Simplificam os comandos: Em vez de usar parâmetros longos, você pode usar versões curtas e convenientes.
- Reduzem erros: Menos chances de cometer erros ao digitar os comandos.
- Economizam tempo: Um apelido e todos os parâmetros já estão configurados.
Como configurar apelidos
Linux/macOS (sistemas Unix-like):
Nestes sistemas, os apelidos são suportados diretamente pelo shell (por exemplo, bash, zsh, etc.). Você pode adicionar apelidos nos arquivos de configuração do shell (por exemplo, .bashrc, .zshrc e outros) para que fiquem disponíveis em qualquer sessão do terminal.
Exemplo para bash:
Abra ou crie o arquivo ~/.bashrc (ou ~/.zshrc para zsh):
nano ~/.bashrc
2. Adicione os apelidos, por exemplo:
alias curlproxy="curl -x http://123.456.789.012:8080"
3. Depois disso, você pode usar o comando curlproxy em qualquer sessão.
curlproxy https://example.com
Windows:
No Windows, o uso de apelidos não é suportado da mesma forma que nos sistemas Unix-like. No entanto, no PowerShell, você pode criar apelidos com o cmdlet New-Alias. Vale ressaltar que o New-Alias não permite atribuir parâmetros para comandos, como o servidor proxy. Em vez disso, para criar apelidos com parâmetros, você pode usar funções do PowerShell ou scripts personalizados.
No PowerShell:
- Abra o PowerShell.
2. Crie uma função para o apelido:
function curlproxy { curl -x http://123.456.789.012:8080 $args }
Se você quiser que essa função esteja disponível sempre, adicione-a no perfil do PowerShell (por exemplo, no arquivo $PROFILE).
No Prompt de Comando (CMD):
No CMD, você pode usar um arquivo batch (.bat) para criar apelidos. Por exemplo, crie um arquivo curlproxy.bat no diretório que está especificado na variável de ambiente PATH e dentro desse arquivo, escreva:
curl -x http://123.456.789.012:8080 %1
Depois disso, você pode usar o comando curlproxy, passando os parâmetros como argumentos.
O arquivo de configuração .curlrc é um arquivo especial utilizado para armazenar as configurações padrão para a ferramenta cURL. Esse arquivo permite automatizar o processo de configuração de parâmetros de linha de comando, como servidores proxy, agentes de usuário, certificados SSL e outros parâmetros. Isso é especialmente útil quando você deseja evitar a necessidade de especificar as mesmas opções toda vez que executar o comando cURL.
Para configurar um proxy no arquivo .curlrc, basta especificar os parâmetros correspondentes. Por exemplo:
proxy = "http://123.456.789.012:8080"
Esse parâmetro instrui o cURL a usar o servidor proxy com o endereço e porta especificados. Também é possível configurar a autenticação para o servidor proxy, fornecendo o nome de usuário e a senha:
proxy-user = "username:password"
Após configurar o arquivo .curlrc, o cURL aplicará automaticamente esses parâmetros ao executar comandos, então você não precisará especificá-los manualmente na linha de comando. Por exemplo, o comando:
curl http://example.com
irá utilizar o proxy especificado no arquivo .curlrc, sem a necessidade de adicionar a flag -x ou outros parâmetros.
Suponha que você queira extrair dados de uma página web específica, como http://example.com. Nesse caso, você pode usar o seguinte comando curl com proxy:
curl -x http://123.45.67.89:8080 http://example.com -o example.html
Aqui:
- -x http://123.45.67.89:8080 — servidor proxy.
- http://example.com — página web alvo da qual você quer extrair dados.
- -o example.html — salva o conteúdo da página no arquivo example.html.
Após executar o comando, o arquivo example.html conterá o código HTML da página alvo.
Agora, vamos extrair os títulos <h1> da página web https://example.com usando proxy.
Passos:
- Usar o servidor proxy para enviar os pedidos.
- Aplicar grep ou sed para extrair os dados.
curl -x http://123.45.67.89:8080 https://example.com | grep -oP '<h1.*?>.*?</h1>'
No PowerShell, você pode usar o Select-String (cmdlet embutido) para realizar uma tarefa semelhante. Por exemplo:
curl.exe -x http://123.45.67.89:8080 https://example.com | Select-String -Pattern '<h1.*?>.*?</h1>' -AllMatches | ForEach-Object { $_.Matches.Value }
Se você tiver o WSL (Windows Subsystem for Linux) instalado, pode executar o mesmo comando que no Linux:
curl -x http://123.45.67.89:8080 https://example.com | grep -oP '<h1.*?>.*?</h1>'
A integração do cURL com Python e Node.js oferece diversas possibilidades para automatizar requisições, web scraping e trabalhar com APIs. Usando os módulos subprocess e pycurl em Python ou child_process e node-libcurl em Node.js, você pode executar comandos complexos e extrair dados em seu aplicativo. Vamos ver como integrar o cURL com cada uma dessas linguagens.
Em Python
Para executar requisições cURL em Python, utilizamos o módulo subprocess.
Requisição GET com Proxy:
import subprocess
curl_command = ['curl', '-x', 'http://123.45.67.89:8080', 'https://example.com']
response = subprocess.run(curl_command, capture_output=True, text=True)
print(response.stdout)
Fazendo o mesmo usando pycurl:
import pycurl
from io import BytesIO
# Inicialização do buffer para capturar a saída
buffer = BytesIO()
# Criação do objeto pycurl
c = pycurl.Curl()
# Definindo o URL
c.setopt(c.URL, 'https://example.com')
# Definindo o proxy
c.setopt(c.PROXY, 'http://123.45.67.89:8080')
# Definindo a saída para o buffer
c.setopt(c.WRITEDATA, buffer)
# Executando a requisição
c.perform()
# Obtendo a resposta
response = buffer.getvalue().decode('utf-8')
# Exibindo a resposta
print(response)
# Limpando
c.close()
Em Node.js
Para realizar requisições cURL em Node.js, usamos o módulo child_process.
Requisição GET com Proxy:
const { exec } = require('child_process');
exec('curl -x http://123.45.67.89:8080 https://example.com', (error, stdout, stderr) => {
if (error) console.error(`exec error: ${error}`);
else console.log(stdout);
});
Fazendo a mesma coisa com node-libcurl:
const { Curl } = require('node-libcurl');
const curl = new Curl();
curl.setOpt('URL', 'https://example.com');
curl.setOpt('PROXY', 'http://123.45.67.89:8080');
// Definindo um callback para tratar a resposta
curl.on('end', (statusCode, body, headers) => {
console.log(body);
curl.close();
});
curl.on('error', (error) => {
console.error('Erro:', error); // Tratamento de erros
});
curl.perform();
A integração do CapMonster Cloud com cURL permite automatizar o processo de resolução de CAPTCHAs ao realizar requisições HTTP. Veja como fazer isso usando cURL:
- Primeiro, registre-se no serviço CapMonster Cloud e obtenha sua chave API.
- Envie uma tarefa de resolução de CAPTCHA (neste caso, reCAPTCHA v2) através do CapMonster Cloud — utilize a documentação:
MacOS/Linux:
curl -X POST https://api.capmonster.cloud/createTask \
-H "Content-Type: application/json" \
-d '{
"clientKey": "API_KEY",
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
"websiteKey": "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
}
}'
Windows (CMD):
curl -X POST https://api.capmonster.cloud/createTask ^
-H "Content-Type: application/json" ^
-d "{\"clientKey\":\"API_KEY\",\"task\":{\"type\":\"RecaptchaV2TaskProxyless\",\"websiteURL\":\"https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high\",\"websiteKey\":\"6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd\"}}"
- Obter o resultado da tarefa:
Após o envio da tarefa, você receberá o ID da tarefa, que será necessário para obter a resposta.
MacOS/Linux:
curl -X POST https://api.capmonster.cloud/getTaskResult \
-H "Content-Type: application/json" \
-d '{
"clientKey": "API_KEY",
"taskId": "task_id_received_from_createTask"
}'
Windows (CMD):
curl -X POST https://api.capmonster.cloud/getTaskResult ^
-H "Content-Type: application/json" ^
-d "{\"clientKey\":\"API_KEY\",\"taskId\":\"task_id_received_from_createTask\"}"
- Resolução do CAPTCHA:
Em resposta à requisição com getTaskResult, o CapMonster retornará a solução da tarefa, como um token para o reCAPTCHA, que pode ser usado para preencher o formulário.
MacOS/Linux:
curl -X POST https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php \
-d "g-recaptcha-response=your_captcha_solution" \
-d "other_data=value"
Windows (CMD):
curl -X POST https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php ^
-d "g-recaptcha-response=your_captcha_solution" ^
-d "other_data=value"
- Exemplo de uso de proxy com a requisição createTask:
Se você deseja enviar a requisição através de um proxy, adicione o parâmetro -x:
MacOS/Linux:
curl -x http://proxy-server:port -X POST https://api.capmonster.cloud/createTask \
-H "Content-Type: application/json" \
-d '{
"clientKey": "API_KEY",
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
"websiteKey": "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
}
}'
Windows (CMD):
curl -x http://proxy-server:port -X POST https://api.capmonster.cloud/createTask ^
-H "Content-Type: application/json" ^
-d "{\"clientKey\": \"API_KEY\", \"task\": {\"type\": \"RecaptchaV2TaskProxyless\", \"websiteURL\": \"https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high\", \"websiteKey\": \"6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd\"}}"
Saída de depuração do curl
Este método é útil para verificar como o curl envia a requisição através do proxy e se ele interpreta corretamente as configurações.
- Use a flag --proxy para indicar o proxy:
curl --proxy http://123.456.7.8.9:3128 http://example.com
- Se o proxy requer autenticação, adicione:
curl --proxy http://user:[email protected]:3128 http://example.com
- Habilite a saída de depuração com a flag -v ou --trace-ascii:
curl -v --proxy http://123.456.7.8.9:3128 http://example.com
Isso mostrará os detalhes da conexão, os cabeçalhos enviados e outras informações úteis.
- Verifique o resultado.
- Se a requisição for bem-sucedida, você verá a resposta HTTP.
- Se houver um erro (como 407 Proxy Authentication Required), você pode ajustar as configurações.
Exemplo com saída completa de rastreamento:
curl --trace-ascii debug.log --proxy http://123.456.7.8.9:3128 http://example.com
A saída será salva no arquivo debug.log para análise detalhada.
Este método é adequado para a verificação detalhada dos dados enviados através do proxy, incluindo cabeçalhos, corpo das requisições, respostas, etc.
Instale e inicie um servidor proxy local:
mitmproxy --listen-port 8080
2. Configure o cURL para usar o proxy local:
curl --proxy http://127.0.0.1:8080 http://example.com
3. Abra a interface do mitmproxy para analisar as requisições:
Você poderá visualizar todas as requisições e respostas HTTP em tempo real.
Isso é útil para depuração, garantindo que as solicitações sejam enviadas corretamente e os dados passem pelo proxy.
Adicionalmente: conecte um proxy remoto através do mitmproxy. Se desejar usar o mitmproxy para monitorar o funcionamento de um proxy remoto, configure-o como um "proxy para proxy" (upstream proxy):
mitmproxy --mode upstream:http://123.456.7.8.9:3128 --listen-port 8080
Para verificar a disponibilidade do próprio proxy, use as flags --connect-timeout e --max-time:
curl --proxy http://123.456.7.8.9:3128 --connect-timeout 10 --max-time 15 http://example.com
Como em qualquer programa, o cURL pode apresentar erros. Abaixo estão alguns erros comuns ao usar o curl com proxy e suas possíveis causas:
curl: (5) Unsupported proxy syntax
Sintaxe de proxy inválida. Certifique-se de que o formato do proxy esteja correto.
curl: (7) Failed to connect to proxy_host port 8080: Connection refused
O servidor proxy está inacessível ou desligado. Endereço IP ou porta do proxy inválidos. Verifique se o proxy está funcionando corretamente. Certifique-se de que o IP e a porta estão corretos.
curl: (7) Could not resolve proxy: proxy_host
O nome DNS do proxy não pode ser resolvido. Certifique-se de que o nome do host esteja correto. Tente usar o endereço IP em vez do nome do host.
curl: (35) schannel: next InitializeSecurityContext failed
Problemas de conexão SSL/TLS. Verifique se o proxy suporta HTTPS. Tente desativar a verificação de certificados temporariamente.
curl: (52) Empty reply from server
O proxy não está respondendo à requisição. Verifique se o servidor está acessível via proxy. Certifique-se de que sua requisição esteja correta.
curl: (56) Proxy CONNECT aborted
O proxy interrompeu a conexão.
Credenciais inválidas para o proxy. Verifique o login e a senha do proxy.
curl: (407) Proxy Authentication Required
O proxy requer autenticação, mas as credenciais não foram fornecidas. Informe o login e a senha na string do proxy.
curl: (28) Operation timed out
O proxy está inacessível.
O servidor demorou muito para responder. Verifique a disponibilidade do proxy e do servidor. Aumente o tempo limite (timeout).
curl: (18) Transfer closed with outstanding read data remaining
O proxy fechou a transferência inesperadamente. Tente usar outro proxy. Certifique-se de que o proxy suporta o protocolo solicitado (HTTP/HTTPS).
curl: (22) The requested URL returned error: 403 Forbidden
O acesso ao recurso através do proxy foi bloqueado. Verifique se o acesso ao URL de destino é permitido através deste proxy. Use outro proxy, se necessário.
curl: (60) SSL certificate problem
Problemas ao verificar o certificado SSL do servidor. Desative a verificação do SSL.
curl: (6) Could not resolve host: example.com
O nome DNS do servidor de destino não pode ser resolvido através do proxy. Verifique a conexão do proxy com a internet. Certifique-se de que o nome do host esteja correto.
Nota: Lembre-se de que o produto é utilizado para automação de testes em seus próprios sites e em sites aos quais você tem acesso legal.