Rinkite antraščių eilutes atskirai nuo atsakymo turinio. Perdavimas per tarpinį serverį gali viena operacija pateikti CONNECT, autentifikavimo, peradresavimo ir paskirties atsakymo antraštes:

$headerLines = [];
curl_setopt($handle, CURLOPT_HEADERFUNCTION,
    function ($handle, $line) use (&$headerLines) {
        $headerLines[] = $line;
        return strlen($line);
    }
);

Šis atgalinis iškvietimas išsaugo neapdorotą eilučių seką ir grąžina priimtų baitų skaičių. Jis gauna visas eilutes; tačiau dar negrupuoja jų į atsakymus ir nepasirenka galutinės svetainės antraščių.

Aiškinkite seką kaip blokus

HTTP būsenos eilutė pradeda atsakymo bloką, o tuščia eilutė baigia jo antraštes. Išsaugokite šias ribas prieš pasirinkdami galutinį paskirties atsakymą. Tarpiniai autentifikavimo bandymai ir peradresavimai gali kiekvienas pridėti blokų.

Traileriai gali atkeliauti vėliau per atgalinį iškvietimą. Laikykite pakankamai analizatoriaus būsenos, kad atskirtumėte juos nuo pradinių antraščių, o ne prikabintumėte kiekvieną vėlesnį lauką prie pirmo atsakymo.

Išsaugokite arba slopinkite tunelio įrodymą

Skaitykite CURLINFO_HTTP_CONNECTCODE atskirai HTTPS tunelio CONNECT būsenai. Priimtas tunelis neįrodo sėkmingo svetainės atsakymo.

Jei rinkėjui CONNECT antraštės nereikalingos, CURLOPT_SUPPRESS_CONNECT_HEADERS valdo jų pateikimą sukonfigūruotai antraščių išvesčiai ir atgalinio iškvietimo keliams. Patikrinkite palaikymą susietoje libcurl ir PHP kompiliacijoje. Slopinimas supaprastina rinkimą, bet pašalina antraščių lygio tunelio įrodymą, kuris gali padėti diagnozuoti.

Neatkurkite turinio fiksuotu poslinkiu ar ieškodami HTML žymos. Antraščių dydžiai skiriasi, tarpiniai atsakymai skiriasi, o turinys gali būti dvejetainis arba tuščias. Senas konkrečios versijos klaidų pranešimas nepateisina spėjamo poslinkio.

Laikykite turinio apdorojimą atskirai ir išsaugokite perdavimo klaidą kartu su stebimais atsakymo etapais, jei rinkimas ar analizė nepavyksta. Tai atskiria nutrauktą atgalinį iškvietimą, sugadintus programos duomenis ir atmestą tarpinio serverio mainus.

Susiję straipsniai