PHP cURL zaglavlja preko proxyja: CONNECT nasuprot odgovorima odredišta
Držite odvojenima zaglavlja CONNECT, autentikacije, preusmjeravanja i konačnog odgovora kada PHP cURL prijenos rabi proxy.
Prikupljajte retke zaglavlja odvojeno od tijela odgovora. Prijenos preko proxyja može dostaviti zaglavlja CONNECT, autentikacije, preusmjeravanja 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 slijed redaka i vraća broj prihvaćenih bajtova. Prima cjelovite retke; ali ih još ne grupira u odgovore niti odabire zaglavlja konačnog web-mjesta.
Tumačite slijed kao blokove
HTTP statusni redak započinje blok odgovora, a prazan redak završava njegova zaglavlja. Sačuvajte te granice prije odabira konačnog odgovora odredišta. Posrednički pokušaji autentikacije i preusmjeravanja mogu svaki dodati blokove.
Traileri mogu kasnije stići kroz povratni poziv. Čuvajte dovoljno stanja parsera da ih razlikujete od početnih zaglavlja, umjesto 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 uspješan odgovor web-mjesta.
Ako CONNECT zaglavlja nisu potrebna prikupljaču, CURLOPT_SUPPRESS_CONNECT_HEADERS kontrolira njihovu dostavu konfiguriranom izlazu zaglavlja i putanjama povratnog poziva. Provjerite podršku u povezanim libcurl i PHP buildovima. Potiskivanje pojednostavljuje prikupljanje, ali uklanja dokaz tunela na razini zaglavlja koji može pomoći dijagnostici.
Ne rekonstruirajte tijelo fiksnim pomakom ni traženjem HTML oznake. Veličine zaglavlja variraju, posrednički odgovori se razlikuju, a tijelo može biti binarno ili prazno. Staro izvješće o pogrešci vezano uz izdanje ne opravdava nagađani pomak.
Držite rukovanje tijelom odvojeno i sačuvajte pogrešku prijenosa uz uočene faze odgovora ako prikupljanje ili parsiranje ne uspije. To razlikuje prekinuti povratni poziv, iskvarene podatke aplikacije i odbijenu proxy razmjenu.