Autentikasi proxy memiliki opsi cURL sendiri. CURLOPT_USERPWD untuk login situs tidak mengatur akun proxy, dan CURLOPT_HTTPAUTH tidak memilih metode autentikasi proxy.

<?php
$user = 'proxy-user';
$password = getenv('PROXY_PASSWORD');
if ($password === false) {
    throw new RuntimeException('Set PROXY_PASSWORD');
}

$ch = curl_init('https://example.com/');
curl_setopt_array($ch, [
    CURLOPT_PROXY => 'http://203.0.113.10:8080',
    CURLOPT_NOPROXY => '',
    CURLOPT_PROXYUSERPWD =>
        rawurlencode($user) . ':' . rawurlencode($password),
    CURLOPT_PROXYAUTH => CURLAUTH_BASIC,
    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;

Ganti IP dokumentasi dan gunakan kredensial yang diberikan untuk proxy tersebut. Basic dipilih sengaja dalam contoh; gunakan metode yang didukung dan disetujui layanan, bukan menganggap semua endpoint memerlukannya.

Kolom gabungan memiliki aturan encoding

libcurl mendokumentasikan bahwa CURLOPT_PROXYUSERPWD melakukan decoding URL pada nama pengguna dan kata sandi. Contoh mengodekan setiap komponen sebelum menggabungkannya dengan pemisah. Ini penting jika urutan persen literal atau karakter khusus lain termasuk dalam kredensial.

Opsi nama pengguna dan kata sandi proxy terpisah menerima nilainya langsung:

curl_setopt($ch, CURLOPT_PROXYUSERNAME, $user);
curl_setopt($ch, CURLOPT_PROXYPASSWORD, $password);

Gunakan sebagai bentuk kredensial alternatif sebelum menjalankan permintaan. Jangan otomatis menerapkan aturan decoding kolom proxy gabungan ke CURLOPT_USERPWD; libcurl mendokumentasikan perbedaannya.

Pisahkan tahapan autentikasi

CURLOPT_PROXYAUTH memilih autentikasi proxy, sedangkan CURLOPT_HTTPAUTH memilih autentikasi HTTP dengan tujuan. Jika keduanya butuh login, atur opsi yang sesuai masing-masing alih-alih menyalin satu kredensial ke kedua tempat.

CURLAUTH_ANY mengizinkan negosiasi dan dapat menambahkan pertukaran tantangan-respons sebelum metode dipilih. Itu tidak membuktikan kredensial benar. Menambahkan juga header Proxy-Authorization secara manual dapat mengganggu penanganan autentikasi pustaka.

Kredensial Basic pada koneksi teks terbuka ke proxy tidak dilindungi tunnel TLS situs yang terbentuk kemudian. Periksa transport tersebut secara terpisah saat memilih cara memakai layanan berautentikasi.

Artikel terkait