Giữ trang web trong curl_init() và đặt trung gian trên handle đó. PHP cần phần mở rộng cURL; chương trình curl chạy được trong terminal không chứng minh phần mở rộng có sẵn.

<?php
$ch = curl_init('https://example.com/');
curl_setopt_array($ch, [
    CURLOPT_PROXY => 'http://203.0.113.10:8080',
    CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
    CURLOPT_NOPROXY => '',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_TIMEOUT => 15,
]);

$body = curl_exec($ch);
if ($body === false) {
    throw new RuntimeException(curl_error($ch), curl_errno($ch));
}

echo curl_getinfo($ch, CURLINFO_RESPONSE_CODE), PHP_EOL;
echo $body;

Thay IP và cổng dùng trong tài liệu bằng proxy HTTP của bạn hoặc một mục từ danh sách proxy HTTP. CURLOPT_NOPROXY xóa quy tắc bỏ qua cho lần thử này; CURLOPT_RETURNTRANSFER trả về phần thân thay vì gửi nó tới trình duyệt. Giới hạn kết nối khống chế thời gian thiết lập, còn thời hạn tổng thể giới hạn thao tác cURL.

Với điểm cuối SOCKS5, thay các tùy chọn proxy HTTP trước curl_exec():

curl_setopt($ch, CURLOPT_PROXY, '203.0.113.10:1080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);

CURLPROXY_SOCKS5_HOSTNAME giao DNS đích cho máy chủ SOCKS. Dùng giao thức đã nêu; chỉ cổng 1080 không xác định được giao thức. Không lựa chọn proxy nào đòi hỏi tắt xác minh chứng chỉ của trang.

Kiểm tra $body === false một cách nghiêm ngặt. Phần thân rỗng vẫn có thể là truyền tải thành công, trong khi đường hầm có thể lỗi trước khi có bất kỳ phản hồi nào của trang. Ngược lại, phần thân không rỗng có thể đi cùng 403, 404 hoặc 429. Đọc CURLINFO_RESPONSE_CODE cùng kết quả lỗi cURL để quyết định yêu cầu đã hoàn tất có đáp ứng nhiệm vụ hay không.

Bài viết liên quan