Pilihan pengesahan proksi dalam PHP cURL
Konfigurasikan kelayakan proksi dengan pilihan cURL yang betul dan kendalikan penyahkodan URL medan gabungan tanpa mengubah pengesahan destinasi.
Pengesahan proksi mempunyai pilihan cURL sendiri. CURLOPT_USERPWD untuk log masuk laman tidak menetapkan akaun proksi, dan CURLOPT_HTTPAUTH tidak memilih kaedah pengesahan proksi.
<?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;
Gantikan IP dokumentasi dan gunakan kelayakan yang diberikan untuk proksi itu. Basic dipilih dengan sengaja dalam contoh; gunakan kaedah yang disokong dan diluluskan perkhidmatan, bukan menganggap semua titik akhir memerlukannya.
Medan gabungan mempunyai peraturan pengekodan
libcurl mendokumenkan bahawa CURLOPT_PROXYUSERPWD menyahkod URL nama pengguna dan kata laluan. Contoh mengekod setiap komponen sebelum menggabungkannya dengan pembatas. Ini penting jika jujukan peratus literal atau aksara khas lain menjadi sebahagian kelayakan.
Pilihan nama pengguna dan kata laluan proksi berasingan menerima nilainya secara terus:
curl_setopt($ch, CURLOPT_PROXYUSERNAME, $user);
curl_setopt($ch, CURLOPT_PROXYPASSWORD, $password);
Gunakannya sebagai bentuk kelayakan alternatif sebelum menjalankan permintaan. Jangan terapkan peraturan penyahkodan medan proksi gabungan secara automatik pada CURLOPT_USERPWD; libcurl mendokumenkan perbezaan.
Asingkan peringkat pengesahan
CURLOPT_PROXYAUTH memilih pengesahan proksi, manakala CURLOPT_HTTPAUTH memilih pengesahan HTTP dengan destinasi. Jika kedua-duanya memerlukan log masuk, tetapkan pilihan sesuai bagi setiap pihak, bukan menyalin kelayakan yang sama ke kedua-dua tempat.
CURLAUTH_ANY membenarkan rundingan dan boleh menambah pertukaran cabaran-respons sebelum kaedah dipilih. Ia tidak membuktikan kelayakan betul. Menambah juga pengepala Proxy-Authorization secara manual boleh mengganggu pengendalian pengesahan pustaka.
Kelayakan Basic pada sambungan teks jelas ke proksi tidak dilindungi terowong TLS laman yang terbentuk kemudian. Semak pengangkutan itu secara berasingan ketika memilih cara menggunakan perkhidmatan berpengesahan.