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