Možnosti overjanja proxyja v PHP cURL
Nastavite poverilnice proxyja s pravimi možnostmi cURL in obravnavajte URL dekodiranje združenega polja brez spremembe overjanja cilja.
Overjanje proxyja ima lastne možnosti cURL. CURLOPT_USERPWD za prijavo na spletno mesto ne nastavi računa proxyja, CURLOPT_HTTPAUTH pa ne izbere metode overjanja proxyja.
<?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;
Zamenjajte dokumentacijski IP in uporabite poverilnice, dane za ta proxy. Basic je v primeru namerno izbran; uporabite metodo, ki jo storitev podpira in odobrava, ne domnevajte, da jo potrebuje vsaka točka.
Združeno polje ima pravilo kodiranja
libcurl dokumentira, da CURLOPT_PROXYUSERPWD URL dekodira uporabniško ime in geslo. Primer kodira vsak del pred združevanjem z ločilom. To je pomembno, ko je dobesedno odstotkovno zaporedje ali drug poseben znak del poverilnic.
Ločeni možnosti uporabniškega imena in gesla proxyja sprejmeta vrednosti neposredno:
curl_setopt($ch, CURLOPT_PROXYUSERNAME, $user);
curl_setopt($ch, CURLOPT_PROXYPASSWORD, $password);
Uporabite ju kot alternativno obliko pred izvedbo zahteve. Pravila dekodiranja združenega proxy polja ne prenesite samodejno na CURLOPT_USERPWD; libcurl dokumentira razliko.
Ločite odseke overjanja
CURLOPT_PROXYAUTH izbira overjanje proxyja, CURLOPT_HTTPAUTH pa HTTP overjanje s ciljem. Če oba zahtevata prijavo, nastavite ustrezne možnosti za vsakega, namesto da iste poverilnice kopirate na obe mesti.
CURLAUTH_ANY omogoča pogajanje in lahko pred izbiro metode doda izmenjavo izziv–odgovor. Ne dokazuje pravilnosti poverilnic. Dodatna ročno dodana glava Proxy-Authorization lahko ovira overjanje, ki ga obravnava knjižnica.
Poverilnic Basic na nešifrirani povezavi do proxyja ne ščiti poznejši TLS tunel spletnega mesta. Pri izbiri uporabe overjene storitve preverite ta transport ločeno.