Guzzle નું cURL હેન્ડલર: પ્રોક્સી CONNECT હેડરો કેપ્ચર કરો
જ્યારે પ્રોક્સીનો CONNECT જવાબ અને વેબસાઇટનો જવાબ બંને મહત્વપૂર્ણ હોય ત્યારે Guzzle ના cURL હેન્ડલર સાથે અલગ જવાબ હેડર બ્લોક્સ કેપ્ચર કરો.
HTTP પ્રોક્સી દ્વારા HTTPS વિનંતી CONNECT સ્વીકારતો એક જવાબ અને પછી તે ટનલની અંદર વેબસાઇટ તરફથી પછીનો જવાબ મેળવી શકે છે. શરૂઆતની રૂટ સેટઅપ માટે Guzzle નું પ્રતિ-વિનંતી પ્રોક્સી વિકલ્પ જુઓ. પ્રથમ જવાબનું હેડર અંતિમ જવાબ ઑબ્જેક્ટમાં હોવું જરૂરી નથી.
તમે જાતે પસંદ કરેલા HTTP એન્ડપોઇન્ટ સાથે પુનરુત્પાદન કરવા માટે HTTP પ્રોક્સીની યાદીમાંથી ઉમેદવાર લો અને તે HTTPS ટનલ સ્વીકારે છે તેની ખાતરી કરો. Guzzle 7.10 ના cURL-હેન્ડલર પથ પર, દરેક હેડર કૉલબેકને અલગ બ્લોક તરીકે રાખો:
$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 એક્સટેન્શને CURLOPT_SUPPRESS_CONNECT_HEADERS આપવું જોઈએ, જે libcurl 7.54.0 દ્વારા રજૂ કરાયેલ વિકલ્પ છે. તેને false પર સેટ કરવાથી CONNECT હેડરો cURL ના હેડર કૉલબેક સુધી પહોંચે છે. Guzzle 7.10 હેન્ડલર દરેક પૂર્ણ થયેલા હેડર બ્લોક માટે જવાબ બનાવે છે અને તે સીમા પર on_headers ને કૉલ કરે છે.
બ્લોક્સને ક્રમમાં રાખો. પ્રમાણીકરણ પડકારો, રીડાયરેક્ટ્સ અને માહિતીપ્રદ જવાબો વધારાના બ્લોક્સ ઉત્પન્ન કરી શકે છે; બધા મૂલ્યોને એક એરેમાં સપાટ ન કરો અને ફક્ત સ્થિતિ 200 હોવાને કારણે જવાબનું વર્ગીકરણ ન કરો.
પરત થયેલો જવાબ પૂર્ણ થયેલી વિનંતીનો જવાબ રજૂ કરે છે, જ્યારે blocks કૉલબેક્સ દ્વારા એકત્રિત અવલોકનો સાચવે છે. જો ટનલ અથવા TLS સેટઅપ નિષ્ફળ જાય, તો કૉલિંગ એપ્લિકેશનમાં ફેંકાયેલા ટ્રાન્સફર અપવાદને હેન્ડલ કરો; અંતિમ વેબસાઇટ જવાબ ન પણ હોય.
આ વર્તન જણાવેલા cURL હેન્ડલર સાથે જોડાયેલું છે. કસ્ટમ અથવા સ્ટ્રીમ હેન્ડલરે સમાન પ્રોક્સી-હેન્ડશેક કૉલબેક્સ આપવાની ફરજ નથી. કેપ્ચર કરેલા પ્રોક્સી હેડરોને નિદાન ડેટા તરીકે ગણો અને એકાઉન્ટ સાથે જોડાયેલા મૂલ્યોને બિનજરૂરી રીતે રાખવાનું ટાળો.