PHP cURL zaglavlja preko proxyja: CONNECT nasuprot odgovorima odredišta
Držite odvojeno zaglavlja CONNECT, autentifikacije, preusmeravanja i konačnog odgovora kada PHP cURL prenos koristi proxy.
Sakupljajte redove zaglavlja odvojeno od tela odgovora. Prenos preko proxyja može dostaviti zaglavlja CONNECT, autentifikacije, preusmeravanja i odgovora odredišta u jednoj operaciji:
$headerLines = [];
curl_setopt($handle, CURLOPT_HEADERFUNCTION,
function ($handle, $line) use (&$headerLines) {
$headerLines[] = $line;
return strlen($line);
}
);
Ovaj povratni poziv zadržava sirovi redosled redova i vraća broj prihvaćenih bajtova. Prima kompletne redove; ali ih još ne grupiše u odgovore niti bira zaglavlja konačnog sajta.
Tumačite sled kao blokove
HTTP statusni red započinje blok odgovora, a prazan red završava njegova zaglavlja. Sačuvajte te granice pre nego što izaberete konačni odgovor odredišta. Posrednički pokušaji autentifikacije i preusmeravanja mogu svaki dodati blokove.
Traileri mogu kasnije stići kroz povratni poziv. Čuvajte dovoljno stanja parsera da ih razlikujete od početnih zaglavlja, umesto da svako kasnije polje prikačite na prvi odgovor.
Sačuvajte ili potisnite dokaz tunela
Čitajte CURLINFO_HTTP_CONNECTCODE odvojeno za CONNECT status HTTPS tunela. Prihvaćeni tunel ne dokazuje uspešan odgovor sajta.
Ako CONNECT zaglavlja nisu potrebna sakupljaču, CURLOPT_SUPPRESS_CONNECT_HEADERS kontroliše njihovu dostavu konfigurisanom izlazu zaglavlja i putanjama povratnog poziva. Proverite podršku u povezanim libcurl i PHP buildovima. Potiskivanje pojednostavljuje sakupljanje, ali uklanja dokaz tunela na nivou zaglavlja koji može pomoći dijagnostici.
Ne rekonstruišite telo fiksnim pomakom ni traženjem HTML oznake. Veličine zaglavlja variraju, posrednički odgovori se razlikuju, a telo može biti binarno ili prazno. Star izveštaj o grešci vezan za izdanje ne opravdava nagađani pomak.
Držite rukovanje telom odvojeno i sačuvajte grešku prenosa uz uočene faze odgovora ako sakupljanje ili parsiranje ne uspe. To razlikuje prekinut povratni poziv, iskvarene podatke aplikacije i odbijenu proxy razmenu.