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 হ্যান্ডলারের সাথে যুক্ত। কাস্টম বা স্ট্রিম হ্যান্ডলারকে একই প্রক্সি-হ্যান্ডশেক কলব্যাক প্রকাশ করতে হবে না। ধরা প্রক্সি হেডারগুলোকে ডায়াগনস্টিক ডেটা হিসেবে দেখুন এবং অ্যাকাউন্ট-সংলগ্ন মান অপ্রয়োজনীয়ভাবে রাখা এড়িয়ে চলুন।