ترويسات PHP cURL عبر الوسيط: CONNECT مقابل ردود الوجهة
أبقِ ترويسات CONNECT والمصادقة وإعادة التوجيه والرد النهائي منفصلة عندما يستخدم نقل PHP cURL وسيطًا.
اجمع أسطر الترويسة منفصلةً عن جسم الرد. قد يسلّم النقل عبر الوسيط ترويسات CONNECT والمصادقة وإعادة التوجيه ورد الوجهة في عملية واحدة:
$headerLines = [];
curl_setopt($handle, CURLOPT_HEADERFUNCTION,
function ($handle, $line) use (&$headerLines) {
$headerLines[] = $line;
return strlen($line);
}
);
يحتفظ هذا الاستدعاء بتسلسل الأسطر الخام ويعيد عدد البايتات المقبولة. وهو يتلقى أسطرًا كاملة؛ لكنه لا يجمّعها بعد في ردود ولا يختار ترويسات الموقع النهائية.
فسّر التسلسل ككتل
يبدأ سطر حالة HTTP كتلة رد، وينهي السطر الفارغ ترويساتها. حافظ على تلك الحدود قبل اختيار رد الوجهة النهائي. وقد تضيف كل محاولة مصادقة وسيطة وكل إعادة توجيه كتلةً خاصة بها.
قد تصل التذييلات لاحقًا عبر الاستدعاء. أبقِ من حالة المحلّل ما يكفي لتمييزها عن الترويسات الأولية بدلًا من إلحاق كل حقل لاحق بالرد الأول.
أبقِ أدلة النفق أو اكتمها
اقرأ CURLINFO_HTTP_CONNECTCODE على حدة لحالة CONNECT في نفق HTTPS. النفق المقبول لا يثبت نجاح رد الموقع.
إذا لم تكن ترويسات CONNECT ضرورية للمُجمِّع، فإن CURLOPT_SUPPRESS_CONNECT_HEADERS يتحكم في تسليمها إلى مخرجات الترويسة المكوَّنة ومسارات الاستدعاء. تحقق من الدعم في libcurl ونسخة PHP المرتبطة. التكتم يبسّط الجمع لكنه يزيل أدلة النفق على مستوى الترويسة التي قد تساعد التشخيص.
لا تستعد الجسم بإزاحة ثابتة أو بالبحث عن وسم HTML. أحجام الترويسات تتفاوت، والردود الوسيطة تختلف، وقد يكون الجسم ثنائيًا أو فارغًا. تقرير خطأ قديم خاص بإصدار لا يبرر إزاحة مُخمَّنة.
أبقِ معالجة الجسم منفصلة، واحتفظ بخطأ النقل مع مراحل الرد المرصودة إذا فشل الجمع أو التحليل. فذلك يميّز بين استدعاء مقطوع وبيانات تطبيق مشوّهة وتبادل وسيط مرفوض.