Glave PHP cURL prek proxyja: CONNECT proti odgovorom cilja
Ločeno hranite glave CONNECT, preverjanja pristnosti, preusmeritve in končnega odgovora, ko prenos PHP cURL uporablja proxy.
Zbirajte vrstice glave ločeno od telesa odgovora. Prenos prek proxyja lahko v eni operaciji dostavi glave CONNECT, preverjanja pristnosti, preusmeritve in odgovora cilja:
$headerLines = [];
curl_setopt($handle, CURLOPT_HEADERFUNCTION,
function ($handle, $line) use (&$headerLines) {
$headerLines[] = $line;
return strlen($line);
}
);
Ta povratni klic ohrani surovo zaporedje vrstic in vrne število sprejetih bajtov. Prejema popolne vrstice; vendar jih še ne združuje v odgovore in ne izbira glav končnega spletnega mesta.
Zaporedje razlagajte kot bloke
Vrstica stanja HTTP začne blok odgovora, prazna vrstica pa konča njegove glave. Ohranite te meje, preden izberete končni odgovor cilja. Vmesni poskusi preverjanja pristnosti in preusmeritve lahko vsak doda bloke.
Sledilniki lahko prispejo pozneje prek povratnega klica. Ohranite dovolj stanja razčlenjevalnika, da jih ločite od začetnih glav, namesto da bi vsako poznejše polje pripeli k prvemu odgovoru.
Ohranite ali zadušite dokaz tunela
Preberite CURLINFO_HTTP_CONNECTCODE ločeno za stanje CONNECT tunela HTTPS. Sprejet tunel ne dokazuje uspešnega odgovora spletnega mesta.
Če zbiralnik ne potrebuje glav CONNECT, CURLOPT_SUPPRESS_CONNECT_HEADERS nadzoruje njihovo dostavo v konfigurirani izhod glav in poti povratnega klica. Preverite podporo v povezanih libcurl in gradnji PHP. Zadušitev poenostavi zbiranje, vendar odstrani dokaz tunela na ravni glav, ki lahko pomaga pri diagnostiki.
Telesa ne obnavljajte s fiksnim odmikom ali z iskanjem oznake HTML. Velikosti glav se razlikujejo, vmesni odgovori se razlikujejo, telo pa je lahko binarno ali prazno. Staro poročilo o napaki, značilno za izdajo, ne upravičuje ugibanega odmika.
Ravnanje s telesom hranite ločeno in ob neuspešnem zbiranju ali razčlenjevanju ohranite napako prenosa skupaj z opaženimi fazami odgovora. To razlikuje prekinjen povratni klic, poškodovane podatke aplikacije in zavrnjeno izmenjavo prek proxyja.