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 ഹാൻഡ്ലറുമായി ബന്ധപ്പെട്ടതാണ്. ഇഷ്ടാനുസൃത ഹാൻഡ്ലറോ സ്ട്രീം ഹാൻഡ്ലറോ അതേ പ്രോക്സി-ഹാൻഡ്ഷേക്ക് കോൾബാക്കുകൾ നൽകാൻ ബാധ്യസ്ഥമല്ല. പിടിച്ചെടുത്ത പ്രോക്സി ഹെഡറുകളെ ഡയഗ്നോസ്റ്റിക് ഡാറ്റയായി കണക്കാക്കുക, അക്കൗണ്ടുമായി ബന്ധപ്പെട്ട മൂല്യങ്ങൾ അനാവശ്യമായി സൂക്ഷിക്കുന്നത് ഒഴിവാക്കുക.