HTTPS zahtev kroz HTTP proxy može primiti jedan odgovor koji prihvata CONNECT i kasniji odgovor web stranice unutar tog tunela. Za početno podešavanje rute pogledajte Guzzleovu opciju proxyja po zahtevu. Zaglavlje iz prvog odgovora ne mora postojati na konačnom objektu odgovora.

Za reprodukciju sa HTTP krajnjom tačkom koju sami odaberete uzmite kandidata sa liste HTTP proxyja i potvrdite da prihvata HTTPS tunel. Na putu cURL rukovaoca u Guzzleu 7.10 sačuvajte svaki povratni poziv zaglavlja kao zaseban blok:

$blocks = [];
$client = new \GuzzleHttp\Client([
    'handler' => \GuzzleHttp\HandlerStack::create(
        new \GuzzleHttp\Handler\CurlHandler()
    ),
]);

$response = $client->get('https://www.example.com/', [
    'proxy' => 'http://proxy.example:8080',
    'curl' => [CURLOPT_SUPPRESS_CONNECT_HEADERS => false],
    'on_headers' => function (
        \Psr\Http\Message\ResponseInterface $part
    ) use (&$blocks) {
        $blocks[] = [
            'status' => $part->getStatusCode(),
            'reason' => $part->getReasonPhrase(),
            'headers' => $part->getHeaders(),
        ];
    },
]);

cURL proširenje mora izložiti CURLOPT_SUPPRESS_CONNECT_HEADERS, opciju koju je uveo libcurl 7.54.0. Postavljanje na false omogućava da CONNECT zaglavlja stignu do cURL-ovog povratnog poziva zaglavlja. Guzzle 7.10 rukovalac gradi odgovor za svaki završeni blok zaglavlja i poziva on_headers na toj granici.

Držite blokove u redosledu. Autentifikacijski izazovi, preusmeravanja i informativni odgovori mogu stvoriti dodatne blokove; nemojte spljoštiti sve vrednosti u jedan niz i nemojte klasifikovati odgovor samo zato što mu je status 200.

Vraćeni odgovor predstavlja odgovor završenog zahteva, dok blocks čuva zapažanja prikupljena povratnim pozivima. Ako podešavanje tunela ili TLS-a ne uspe, obradite bačeni izuzetak prenosa u aplikaciji koja poziva; konačni odgovor web stranice možda ne postoji.

Ovo ponašanje je vezano za navedeni cURL rukovalac. Prilagođeni rukovalac ili rukovalac toka nije obavezan da izloži iste povratne pozive proxy rukovanja. Tretirajte uhvaćena proxy zaglavlja kao dijagnostičke podatke i izbegavajte nepotrebno zadržavanje vrednosti povezanih sa nalogom.

Povezani članci