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 ознаке. Величине заглавља варирају, посреднички одговори се разликују, а тело може бити бинарно или празно. Стари извештај о грешци везан за издање не оправдава нагађани помак.
Држите руковање телом одвојено и сачувајте грешку преноса уз уочене фазе одговора ако сакупљање или парсирање не успе. То разликује прекинут повратни позив, искварене податке апликације и одбијену прокси размену.