Тақырып жолдарын жауап денесінен бөлек жинаңыз. Прокси арқылы өтетін тасымал CONNECT, аутентификация, қайта бағыттау және межелі жауап тақырыптарын бір әрекетте жеткізуі мүмкін:

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

Бұл қайта шақыру өңделмеген жол ретін сақтайды және қабылданған байт санын қайтарады. Ол толық жолдарды алады; бірақ оларды әзірге жауаптарға топтастырмайды және соңғы сайттың тақырыптарын таңдамайды.

Ретті блоктар ретінде түсіндіріңіз

HTTP күй жолы жауап блогын бастайды, ал бос жол оның тақырыптарын аяқтайды. Соңғы межелі жауапты таңдамас бұрын осы шекараларды сақтаңыз. Аралық аутентификация әрекеттері мен қайта бағыттаулардың әрқайсысы блоктар қосуы мүмкін.

Trailer-лер кейінірек қайта шақыру арқылы келуі мүмкін. Әрбір кейінгі өрісті бірінші жауапқа тіркеудің орнына, оларды бастапқы тақырыптардан ажырату үшін жеткілікті талдаушы күйін ұстаңыз.

Туннель дәлелін сақтаңыз немесе басыңыз

HTTPS туннелінің CONNECT күйі үшін CURLINFO_HTTP_CONNECTCODE бөлек оқыңыз. Қабылданған туннель сайттың сәтті жауабын дәлелдемейді.

Егер жинаушыға CONNECT тақырыптары қажет болмаса, CURLOPT_SUPPRESS_CONNECT_HEADERS олардың конфигурацияланған тақырып шығысына және қайта шақыру жолдарына жеткізілуін басқарады. Байланысқан libcurl және PHP құрастырмасында қолдауды тексеріңіз. Басу жинауды жеңілдетеді, бірақ диагностикаға көмектесетін тақырып деңгейіндегі туннель дәлелін жояды.

Денені бекітілген ығысумен немесе HTML тегін іздеу арқылы қалпына келтірмеңіз. Тақырып өлшемдері әртүрлі, аралық жауаптар өзгеше, ал дене екілік немесе бос болуы мүмкін. Ескі шығарылымға тән қате есебі болжамды ығысуды ақтамайды.

Денені өңдеуді бөлек ұстаңыз және жинау немесе талдау сәтсіз болса, тасымал қатесін байқалған жауап кезеңдерімен бірге сақтаңыз. Бұл үзілген қайта шақыруды, бұзылған қолданба деректерін және қабылданбаған прокси алмасуын ажыратады.

Қатысты мақалалар