Como Usar um Proxy Com o PowerShell Invoke-WebRequest
Specialist in Anti-Bot Strategies
Domine a configuração de proxy do PowerShell para solicitações web seguras e anônimas. Roteie o tráfego através de proxies residenciais para contornar restrições geográficas e evitar bloqueios de IP.
Principais Conclusões
- O parâmetro -Proxy do Invoke-WebRequest permite rotear o tráfego através de servidores proxy
- O PowerShell 7.x suporta proxies HTTPS e SOCKS; versões anteriores suportam apenas HTTP
- O parâmetro ProxyCredential lida com autenticação quando os proxies exigem credenciais de login
- Proxies residenciais fornecem IPs legítimos atribuídos por ISPs que contornam bloqueios baseados em IP
- Objetos de sessão mantêm as configurações de proxy entre várias solicitações automaticamente
Entendendo os Proxies do Invoke-WebRequest
Invoke-WebRequest é o cmdlet nativo do PowerShell para fazer requisições HTTP e HTTPS. O parâmetro -Proxy roteia as requisições através de servidores proxy especificados em vez de se conectar diretamente aos sites-alvo. Essa capacidade permite que scripts:
- Acessem conteúdo com restrições geográficas de locais específicos
- Distribuam requisições entre múltiplos IPs para evitar limitação de taxa
- Ocultem as origens do script de sites-alvo
- Testem a conectividade de rede através de proxies corporativos
O parâmetro proxy aceita URLs no formato: <PROTOCOL>://<HOST>:<PORT>
Configuração Básica de Proxy HTTP
A configuração de proxy mais simples especifica um endereço HTTP e uma porta:
powershell
$proxyUrl = "http://47.252.29.28:11222"
$response = Invoke-WebRequest -Uri "https://httpbin.io/ip" -Proxy $proxyUrl
Write-Output $response.Content
Esse comando roteia a requisição através do servidor proxy especificado. O site-alvo recebe a solicitação do endereço IP do proxy em vez do endereço IP do seu computador.
Autenticação de Proxy
Muitos provedores de proxy exigem autenticação para evitar o uso não autorizado. O parâmetro -ProxyCredential passa o nome de usuário e a senha:
powershell
$proxyUrl = "http://proxy.example.com:8080"
$proxyCreds = Get-Credential
$response = Invoke-WebRequest -Uri "https://httpbin.io/ip" `
-Proxy $proxyUrl `
-ProxyCredential $proxyCreds
Get-Credential abre um prompt interativo solicitando credenciais. Para scripts automatizados, crie credenciais programaticamente:
powershell
$username = "proxy_user"
$password = "proxy_password"
$secPassword = ConvertTo-SecureString $password -AsPlainText -Force
$proxyCreds = New-Object System.Management.Automation.PSCredential `
-ArgumentList $username, $secPassword
$response = Invoke-WebRequest -Uri "https://httpbin.io/ip" `
-Proxy "http://proxy.example.com:8080" `
-ProxyCredential $proxyCreds
URLs de Proxy com Credenciais Embutidas
Alternativamente, embuta credenciais diretamente na URL do proxy:
powershell
$proxyUrl = "http://username:password@proxy.example.com:8080"
$response = Invoke-WebRequest -Uri "https://httpbin.io/ip" -Proxy $proxyUrl
Essa abordagem é conveniente para scripts onde a gestão de credenciais é menos crítica.
Suporte a Proxies HTTPS e SOCKS
O PowerShell 7.x+ adiciona suporte para proxies HTTPS e SOCKS. Se estiver usando versões anteriores, apenas proxies HTTP funcionam. Atualize para o PowerShell 7 para suporte total a protocolos de proxy:
powershell
# Proxy HTTPS
$response = Invoke-WebRequest -Uri "https://example.com" `
-Proxy "https://username:password@proxy.example.com:8080"
# Proxy SOCKS5
$response = Invoke-WebRequest -Uri "https://example.com" `
-Proxy "socks5://username:password@proxy.example.com:1080"
Verifique sua versão do PowerShell:
powershell
$PSVersionTable.PSVersion
Estratégia de Rotação de Proxies
Para scraping em larga escala ou chamadas de API, rotacionar entre múltiplos proxies distribui requisições entre diferentes IPs, evitando limites de taxa e bloqueios de IP:
powershell
$proxyList = @(
"http://user:pass@proxy1.example.com:8080",
"http://user:pass@proxy2.example.com:8080",
"http://user:pass@proxy3.example.com:8080"
)
$urls = @(
"https://api.example.com/page1",
"https://api.example.com/page2",
"https://api.example.com/page3"
)
foreach ($url in $urls) {
$randomProxy = $proxyList | Get-Random
$response = Invoke-WebRequest -Uri $url -Proxy $randomProxy
Write-Output "Resposta de $url usando $randomProxy"
}
Essa abordagem seleciona aleatoriamente um proxy diferente para cada solicitação, prevenindo a acumulação de requisições por IP que acionam bloqueios.
Proxies Residenciais Premium com PowerShell
Proxies Residenciais Scrapeless fornecem infraestrutura de proxy de qualidade profissional para automação PowerShell. Proxies residenciais usam IPs atribuídos por ISPs legítimos, melhorando dramaticamente as taxas de sucesso contra sites protegidos:
powershell
# Proxy residencial Scrapeless com autenticação
$proxyUrl = "http://username:password@superproxy.scrapeless.com:1337"
$headers = @{
'User-Agent' = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
$response = Invoke-WebRequest -Uri "https://example.com" `
-Proxy $proxyUrl `
-Headers $headers
Write-Output $response.StatusCode
Scrapeless gerencia mais de 90 milhões de IPs residenciais em mais de 195 países com rotação automática e segmentação geográfica.
Configuração de Proxy Baseada em Sessão
Para múltiplas solicitações relacionadas, objetos de sessão mantêm configurações de proxy automaticamente:
powershell
$proxyUrl = "http://username:password@superproxy.scrapeless.com:1337"
$webSession = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$webSession.Proxy = New-Object System.Net.WebProxy($proxyUrl)
# Primeiro pedido
$response1 = Invoke-WebRequest -Uri "https://example.com/page1" `
-WebSession $webSession
# Segundo pedido usa automaticamente o mesmo proxy
$response2 = Invoke-WebRequest -Uri "https://example.com/page2" `
-WebSession $webSession
# Terceiro pedido com as mesmas configurações de proxy
$response3 = Invoke-WebRequest -Uri "https://example.com/page3" `
-WebSession $webSession
Objetos de sessão eliminam a especificação repetitiva do proxy para pedidos sequenciais.
Listas de Bypass para Proxy
Alguns ambientes requerem conexões diretas a hosts específicos, contornando proxies. Defina listas de bypass para acesso direto:
powershell
$proxy = New-Object System.Net.WebProxy("http://proxy.example.com:8080")
$proxy.BypassList += "*.internal.company.com"
$proxy.BypassList += "localhost"
[System.Net.WebRequest]::DefaultWebProxy = $proxy
$response = Invoke-WebRequest -Uri "https://internal.company.com"
Hosts ignorados se conectam diretamente em vez de serem roteados através do servidor proxy.
Tratamento de Erros de Certificado SSL
Algumas configurações de proxy ou certificados autoassinados causam erros SSL. Para fins de teste, ignore a validação do certificado:
powershell
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
$response = Invoke-WebRequest -Uri "https://example.com" `
-Proxy "http://proxy.example.com:8080"
Aviso: Desativar a validação do certificado expõe você a ataques man-in-the-middle. Use somente em ambientes controlados.
PowerShell 7.4+ fornece o parâmetro mais seguro -SkipCertificateCheck:
powershell
$response = Invoke-WebRequest -Uri "https://example.com" `
-Proxy "http://proxy.example.com:8080" `
-SkipCertificateCheck
Caso de Uso Avançado: Web Scraping com Proxies
Combine proxies residenciais com cabeçalhos e atrasos adequados para uma raspagem de dados efetiva:
powershell
function Invoke-ScrapingRequest {
param(
[Parameter(Mandatory=$true)]
[string]$Url,
[Parameter(Mandatory=$true)]
[string]$ProxyUrl,
[int]$DelayMs = 2000
)
$headers = @{
'User-Agent' = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
'Accept' = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
'Accept-Language' = 'en-US,en;q=0.9'
}
Start-Sleep -Milliseconds $DelayMs
$response = Invoke-WebRequest -Uri $Url `
-Proxy $ProxyUrl `
-Headers $headers `
-ErrorAction SilentlyContinue
return $response
}
# Uso
$proxyUrl = "http://user:pass@superproxy.scrapeless.com:1337"
$response = Invoke-ScrapingRequest -Url "https://example.com" -ProxyUrl $proxyUrl
Esse padrão implementa atrasos nas requisições entre chamadas, cabeçalhos que imitam navegadores legítimos, e rotação de proxies residenciais para uma raspagem em larga escala confiável.
Resolução de Problemas com Proxies
Conexão Recusada: Verifique o host e a porta do proxy. Teste a conectividade diretamente:
powershell
Test-NetConnection -ComputerName "proxy.example.com" -Port 8080
Autenticação Falhou: Confirme se o nome de usuário e a senha estão corretos. Credenciais embutidas em URLs requerem codificação de URL se contiverem caracteres especiais.
Desempenho Lento: Tente diferentes proxies, se disponíveis. Alguns proxies podem estar geograficamente distantes ou congestionados.
Proxy Não Utilizado: Verifique se o Invoke-WebRequest usa o parâmetro -Proxy. Variáveis de ambiente ou configurações de proxy do sistema não afetam automaticamente o Invoke-WebRequest.
Proxies de Variáveis de Ambiente
O PowerShell 7.x+ respeita as variáveis de ambiente HTTP_PROXY e HTTPS_PROXY, se definidas:
powershell
$env:HTTP_PROXY = "http://proxy.example.com:8080"
$env:HTTPS_PROXY = "http://proxy.example.com:8080"
$response = Invoke-WebRequest -Uri "https://example.com"
Versões anteriores do PowerShell ignoram variáveis de ambiente—especifique explicitamente o parâmetro -Proxy.
Chamadas de API REST Através de Proxies
O cmdlet Invoke-RestMethod similar também aceita o parâmetro -Proxy para chamadas de API JSON:
powershell
$proxyUrl = "http://username:password@superproxy.scrapeless.com:1337"
$response = Invoke-RestMethod -Uri "https://api.example.com/data" `
-Proxy $proxyUrl `
-Method Get
$response | ConvertTo-Json
FAQ
Q: Posso usar Invoke-WebRequest sem especificar um proxy?
A: Sim. Omitir o parâmetro -Proxy para conexões diretas. No entanto, isso expõe seu endereço IP real e impede que você contorne restrições geográficas ou limites de taxa.
Q: Quantas chamadas simultâneas de Invoke-WebRequest posso fazer através de um proxy?
A: O PowerShell limita operações simultâneas com base nos recursos do sistema. A maioria dos scripts executa com sucesso de 10 a 50 requisições paralelas. Proxies residenciais premium como o Scrapeless suportam concorrência ilimitada no nível da infraestrutura do proxy.
Q: Qual é a diferença entre os parâmetros -Proxy e -ProxyCredential?
A: O parâmetro -Proxy especifica o endereço do servidor proxy. O parâmetro -ProxyCredential fornece credenciais de autenticação separadas da URL, útil quando as credenciais contêm caracteres especiais que precisam de codificação de URL.
Q: Preciso de permissões elevadas para usar proxies com Invoke-WebRequest?
A: Não. O uso de proxies requer apenas conectividade de rede com o servidor proxy. Privilégios de administrador não são necessários para operações padrão de proxy.
Q: O Invoke-WebRequest pode funcionar com proxies SOCKS no Windows PowerShell 5.1?
A: Não. O Windows PowerShell 5.1 suporta apenas proxies HTTP. Atualize para o PowerShell 7.x para acessar suporte a proxies SOCKS. Baixe o PowerShell 7 do repositório oficial da Microsoft—ele é instalado ao lado do Windows PowerShell sem conflitos.
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.



