Bir HTTP proxy üzerinden geçen HTTPS isteği, CONNECT'i kabul eden bir yanıt ve daha sonra tünelin içindeki web sitesinden gelen bir başka yanıt alabilir. İlk rota kurulumu için Guzzle'ın istek başına proxy seçeneğine bakın. İlk yanıttaki bir başlığın son yanıt nesnesinde bulunması gerekmez.

Kendiniz seçtiğiniz bir HTTP uç noktasıyla yeniden üretmek için HTTP proxy listesinden bir aday alın ve HTTPS tünelini kabul ettiğini doğrulayın. Guzzle 7.10'un cURL işleyici yolu için her header callback'ini ayrı bir blok olarak koruyun:

$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 eklentisi, libcurl 7.54.0 tarafından getirilen CURLOPT_SUPPRESS_CONNECT_HEADERS seçeneğini sunmalıdır. Bunu false yapmak CONNECT başlıklarının cURL'ün header callback'ine ulaşmasını sağlar. Guzzle 7.10 işleyicisi tamamlanan her başlık bloğu için bir yanıt oluşturur ve on_headers'ı bu sınırda çağırır.

Blokları sırayla tutun. Kimlik doğrulama meydan okumaları, yönlendirmeler ve bilgilendirici yanıtlar ek bloklar üretebilir; tüm değerleri tek bir array'de düzleştirmeyin ve bir yanıtı yalnızca durumu 200 olduğu için sınıflandırmayın.

Döndürülen yanıt tamamlanan isteğin yanıtını temsil ederken blocks, callback'lerin topladığı gözlemleri korur. Tünel veya TLS kurulumu başarısız olursa, fırlatılan transfer exception'ı çağıran uygulamada ele alın; son bir web sitesi yanıtı olmayabilir.

Bu davranış belirtilen cURL işleyicisine bağlıdır. Özel bir işleyici veya stream işleyicisinin aynı proxy-handshake callback'lerini sunması gerekmez. Yakalanan proxy başlıklarını tanılama verisi olarak değerlendirin ve hesaba bağlı değerleri gereksiz yere saklamaktan kaçının.

İlgili makaleler