🎯 Trình duyệt đám mây tùy chỉnh, chống phát hiện được hỗ trợ bởi Chromium tự phát triển, thiết kế dành cho trình thu thập dữ liệu webtác nhân AI. 👉Dùng thử ngay
Quay lại blog

Cách Sử Dụng Proxy Với PowerShell Invoke-WebRequest

Michael Lee
Michael Lee

Expert Network Defense Engineer

17-Dec-2025
Nhìn Qua Nhanh

Làm chủ cấu hình proxy PowerShell cho các yêu cầu web an toàn, ẩn danh. Định tuyến lưu lượng qua các proxy dân cư để vượt qua các rào cản địa lý và tránh bị chặn IP.

Những Điểm Chú Ý Chính

  • Tham số -Proxy của Invoke-WebRequest cho phép định tuyến lưu lượng qua các máy chủ proxy
  • PowerShell 7.x hỗ trợ proxy HTTPS và SOCKS; các phiên bản trước hỗ trợ HTTP chỉ
  • Tham số ProxyCredential xử lý xác thực khi các proxy yêu cầu thông tin đăng nhập
  • Proxy dân cư cung cấp IP được phân phối hợp pháp bởi nhà cung cấp dịch vụ Internet giúp vượt qua việc chặn dựa trên IP
  • Đối tượng phiên giữ cài đặt proxy qua nhiều yêu cầu một cách tự động

Hiểu Về Proxy của Invoke-WebRequest

Invoke-WebRequest là cmdlet gốc của PowerShell để thực hiện các yêu cầu HTTP và HTTPS. Tham số -Proxy định tuyến các yêu cầu qua các máy chủ proxy được chỉ định thay vì kết nối trực tiếp đến các trang web đích. Khả năng này cho phép các script:

  • Truy cập nội dung bị hạn chế địa lý từ các địa điểm cụ thể
  • Phân phối yêu cầu trên nhiều IP để tránh giới hạn tốc độ
  • Ẩn nguồn gốc script khỏi các trang web đích
  • Kiểm tra khả năng kết nối mạng thông qua các proxy doanh nghiệp

Tham số proxy chấp nhận các URL có định dạng: <PROTOCOL>://<HOST>:<PORT>

Cấu Hình Proxy HTTP Cơ Bản

Thiết lập proxy đơn giản nhất chỉ định một địa chỉ và cổng HTTP:

powershell Copy
$proxyUrl = "http://47.252.29.28:11222"
$response = Invoke-WebRequest -Uri "https://httpbin.io/ip" -Proxy $proxyUrl
Write-Output $response.Content

Lệnh này định tuyến yêu cầu qua máy chủ proxy được chỉ định. Trang web đích nhận yêu cầu từ địa chỉ IP của proxy thay vì địa chỉ IP của máy tính của bạn.

Xác Thực Proxy

Nhiều nhà cung cấp proxy yêu cầu xác thực để ngăn chặn việc sử dụng trái phép. Tham số -ProxyCredential truyền tên người dùng và mật khẩu:

powershell Copy
$proxyUrl = "http://proxy.example.com:8080"
$proxyCreds = Get-Credential
$response = Invoke-WebRequest -Uri "https://httpbin.io/ip" `
    -Proxy $proxyUrl `
    -ProxyCredential $proxyCreds

Get-Credential mở một hộp thoại tương tác yêu cầu thông tin đăng nhập. Đối với các script tự động, tạo thông tin đăng nhập theo cách lập trình:

powershell Copy
$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

URL Proxy Nhúng Thông Tin Đăng Nhập

Ngoài ra, nhúng thông tin đăng nhập trực tiếp vào URL proxy:

powershell Copy
$proxyUrl = "http://username:password@proxy.example.com:8080"
$response = Invoke-WebRequest -Uri "https://httpbin.io/ip" -Proxy $proxyUrl

Cách tiếp cận này là thuận tiện cho các script mà quản lý thông tin đăng nhập ít quan trọng hơn.

Hỗ Trợ Proxy HTTPS và SOCKS

PowerShell 7.x+ thêm hỗ trợ cho proxy HTTPS và SOCKS. Nếu sử dụng các phiên bản trước, chỉ các proxy HTTP mới hoạt động. Cập nhật lên PowerShell 7 để hỗ trợ đầy đủ các giao thức proxy:

powershell Copy
# 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"

Xác minh phiên bản PowerShell của bạn:

powershell Copy
$PSVersionTable.PSVersion

Chiến Lược Xoay Vòng Proxy

Đối với việc thu thập thông tin quy mô lớn hoặc gọi API, xoay vòng giữa nhiều proxy phân phối yêu cầu qua các IP khác nhau, tránh giới hạn tốc độ và bị cấm IP:

powershell Copy
$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 "Phản hồi từ $url sử dụng $randomProxy"
}

Cách tiếp cận này chọn một proxy khác ngẫu nhiên cho mỗi yêu cầu, ngăn chặn việc tích lũy yêu cầu theo IP gây ra việc chặn.

Proxy Dân Cư Cao Cấp Với PowerShell

Copy
<a href="https://www.scrapeless.com/vi/product/proxy-solutions" rel="nofollow"><strong>Proxy Dân Cư Scrapeless</strong></a> cung cấp cơ sở hạ tầng proxy chuyên nghiệp cho tự động hóa PowerShell. Proxy dân cư sử dụng các IP hợp pháp được cấp bởi ISP, cải thiện đáng kể tỷ lệ thành công khi truy cập các trang web được bảo vệ:

```powershell
# Proxy dân cư Scrapeless với xác thực
$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 quản lý hơn 90 triệu IP dân cư trên 195 quốc gia với tính năng tự động quay vòng và nhắm mục tiêu địa lý.

Cấu Hình Proxy Theo Phiên

Đối với nhiều yêu cầu liên quan, các đối tượng phiên sẽ tự động duy trì cài đặt proxy:

powershell Copy
$proxyUrl = "http://username:password@superproxy.scrapeless.com:1337"
$webSession = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$webSession.Proxy = New-Object System.Net.WebProxy($proxyUrl)

# Yêu cầu đầu tiên
$response1 = Invoke-WebRequest -Uri "https://example.com/page1" `
    -WebSession $webSession

# Yêu cầu thứ hai tự động sử dụng cùng một proxy
$response2 = Invoke-WebRequest -Uri "https://example.com/page2" `
    -WebSession $webSession

# Yêu cầu thứ ba với cùng cài đặt proxy
$response3 = Invoke-WebRequest -Uri "https://example.com/page3" `
    -WebSession $webSession

Các đối tượng phiên loại bỏ việc xác định proxy lặp lại cho các yêu cầu tuần tự.

Danh Sách Bỏ Qua Proxy

Một số môi trường yêu cầu kết nối trực tiếp đến các máy chủ cụ thể, bỏ qua proxy. Định nghĩa danh sách bỏ qua để truy cập trực tiếp:

powershell Copy
$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"

Các máy chủ bỏ qua sẽ kết nối trực tiếp thay vì định tuyến qua máy chủ proxy.

Xử Lý Lỗi Chứng Chỉ SSL

Một số cấu hình proxy hoặc chứng chỉ tự ký gây ra lỗi SSL. Để thử nghiệm, bỏ qua việc xác thực chứng chỉ:

powershell Copy
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

$response = Invoke-WebRequest -Uri "https://example.com" `
    -Proxy "http://proxy.example.com:8080"

Cảnh Báo: Vô hiệu hóa việc xác thực chứng chỉ khiến bạn dễ bị tấn công man-in-the-middle. Chỉ sử dụng trong các môi trường được kiểm soát.

PowerShell 7.4+ cung cấp tham số an toàn hơn -SkipCertificateCheck:

powershell Copy
$response = Invoke-WebRequest -Uri "https://example.com" `
    -Proxy "http://proxy.example.com:8080" `
    -SkipCertificateCheck

Trường Hợp Sử Dụng Nâng Cao: Cào Dữ Liệu Web Với Proxy

Kết hợp proxy dân cư với tiêu đề và độ trễ hợp lý để cào dữ liệu web hiệu quả:

powershell Copy
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
}

# Cách sử dụng
$proxyUrl = "http://user:pass@superproxy.scrapeless.com:1337"
$response = Invoke-ScrapingRequest -Url "https://example.com" -ProxyUrl $proxyUrl

Mẫu này thực hiện độ trễ giữa các cuộc gọi, tiêu đề giả lập trình duyệt hợp pháp và quay vòng proxy dân cư để cào dữ liệu quy mô lớn một cách đáng tin cậy.

Khắc Phục Sự Cố Liên Quan Đến Proxy

Kết Nối Bị Từ Chối: Xác minh máy chủ proxy và cổng. Kiểm tra khả năng kết nối trực tiếp:

powershell Copy
Test-NetConnection -ComputerName "proxy.example.com" -Port 8080

Xác thực không thành công: Xác nhận tên người dùng và mật khẩu là chính xác. Thông tin đăng nhập nhúng trong các URL yêu cầu mã hóa URL nếu chúng chứa ký tự đặc biệt.

Hiệu suất chậm: Thử các proxy khác nếu có sẵn. Một số proxy có thể ở xa về mặt địa lý hoặc bị tắc nghẽn.

Proxy không được sử dụng: Xác minh rằng Invoke-WebRequest sử dụng tham số -Proxy. Các biến môi trường hoặc cài đặt proxy hệ thống không tự động ảnh hưởng đến Invoke-WebRequest.

Proxy biến môi trường

PowerShell 7.x+ tôn trọng các biến môi trường HTTP_PROXY và HTTPS_PROXY nếu được thiết lập:

powershell Copy
$env:HTTP_PROXY = "http://proxy.example.com:8080"
$env:HTTPS_PROXY = "http://proxy.example.com:8080"

$response = Invoke-WebRequest -Uri "https://example.com"

Các phiên bản PowerShell trước đó sẽ bỏ qua các biến môi trường—hãy chỉ định rõ tham số -Proxy.

Gọi REST API qua Proxy

Lệnh Invoke-RestMethod tương tự cũng chấp nhận tham số -Proxy cho các cuộc gọi API JSON:

powershell Copy
$proxyUrl = "http://username:password@superproxy.scrapeless.com:1337"

$response = Invoke-RestMethod -Uri "https://api.example.com/data" `
    -Proxy $proxyUrl `
    -Method Get

$response | ConvertTo-Json

Câu hỏi thường gặp

Q: Tôi có thể sử dụng Invoke-WebRequest mà không cần chỉ định một proxy không?

A: Có. Bỏ qua tham số -Proxy cho các kết nối trực tiếp. Tuy nhiên, điều này làm lộ địa chỉ IP thực tế của bạn và ngăn cản việc vượt qua các hạn chế địa lý hoặc giới hạn tốc độ.

Q: Tôi có thể thực hiện bao nhiêu cuộc gọi Invoke-WebRequest đồng thời qua một proxy?

A: PowerShell giới hạn các hoạt động đồng thời dựa trên tài nguyên hệ thống. Hầu hết các kịch bản chạy thành công 10-50 yêu cầu song song. Các proxy dân cư cao cấp như Scrapeless hỗ trợ đồng thời không giới hạn ở cấp độ hạ tầng proxy.

Q: Sự khác biệt giữa các tham số -Proxy và -ProxyCredential là gì?

A: Tham số -Proxy chỉ định địa chỉ máy chủ proxy. Tham số -ProxyCredential cung cấp thông tin xác thực đăng nhập tách biệt với URL, hữu ích khi thông tin xác thực chứa các ký tự đặc biệt cần mã hóa URL.

Q: Tôi có cần quyền nâng cao để sử dụng proxy với Invoke-WebRequest không?

A: Không. Việc sử dụng proxy chỉ yêu cầu kết nối mạng tới máy chủ proxy. Quyền quản trị không cần thiết cho các hoạt động proxy tiêu chuẩn.

Q: Có thể sử dụng Invoke-WebRequest với các proxy SOCKS trên Windows PowerShell 5.1 không?

A: Không. Windows PowerShell 5.1 chỉ hỗ trợ các proxy HTTP. Nâng cấp lên PowerShell 7.x để truy cập hỗ trợ proxy SOCKS. Tải xuống PowerShell 7 từ kho lưu trữ chính thức của Microsoft—nó sẽ được cài đặt song song với Windows PowerShell mà không có xung đột.

Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến ​​cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.

Bài viết phổ biến nhất

Danh mục