Η ταυτοποίηση proxy έχει δικές της επιλογές cURL. Το CURLOPT_USERPWD για σύνδεση σε ιστότοπο δεν ρυθμίζει τον λογαριασμό του proxy, και το CURLOPT_HTTPAUTH δεν επιλέγει μέθοδο ταυτοποίησης 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;

Αντικαταστήστε την IP τεκμηρίωσης και χρησιμοποιήστε τα διαπιστευτήρια που δόθηκαν για αυτό το proxy. Το Basic επιλέγεται σκόπιμα εδώ· χρησιμοποιήστε τη μέθοδο που υποστηρίζεται και εγκρίνεται για την υπηρεσία, χωρίς να υποθέτετε ότι τη χρειάζεται κάθε σημείο.

Το ενιαίο πεδίο έχει κανόνα κωδικοποίησης

Το libcurl τεκμηριώνει ότι το CURLOPT_PROXYUSERPWD αποκωδικοποιεί ως URL όνομα χρήστη και συνθηματικό. Το παράδειγμα κωδικοποιεί κάθε μέρος πριν από τη σύνδεση με τον διαχωριστή. Αυτό μετρά όταν μια κυριολεκτική ακολουθία ποσοστού ή άλλο ειδικό σύμβολο ανήκει στα διαπιστευτήρια.

Οι χωριστές επιλογές ονόματος χρήστη και συνθηματικού proxy δέχονται απευθείας τις τιμές τους:

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

Χρησιμοποιήστε τες ως εναλλακτική μορφή πριν εκτελέσετε το αίτημα. Μην εφαρμόζετε αυτόματα τον κανόνα αποκωδικοποίησης του ενιαίου πεδίου proxy στο CURLOPT_USERPWD· το libcurl τεκμηριώνει διαφορά.

Κρατήστε χωριστά τα σκέλη ταυτοποίησης

Το CURLOPT_PROXYAUTH επιλέγει ταυτοποίηση proxy, ενώ το CURLOPT_HTTPAUTH HTTP ταυτοποίηση με τον προορισμό. Αν και οι δύο απαιτούν σύνδεση, ρυθμίστε κατάλληλες επιλογές για καθέναν αντί να αντιγράφετε τα ίδια διαπιστευτήρια και στα δύο σημεία.

Το CURLAUTH_ANY επιτρέπει διαπραγμάτευση και μπορεί να προσθέσει ανταλλαγή πρόκλησης-απόκρισης πριν επιλεγεί μέθοδος. Δεν αποδεικνύει σωστά διαπιστευτήρια. Η επιπλέον χειροκίνητη προσθήκη κεφαλίδας Proxy-Authorization μπορεί να παρεμβληθεί στον χειρισμό ταυτοποίησης της βιβλιοθήκης.

Τα διαπιστευτήρια Basic σε σύνδεση απλού κειμένου προς το proxy δεν προστατεύονται από τη μεταγενέστερη σήραγγα TLS του ιστοτόπου. Ελέγξτε αυτή τη μεταφορά χωριστά όταν επιλέγετε χρήση υπηρεσίας με ταυτοποίηση.

Σχετικά άρθρα