Mga header ng PHP cURL sa proxy: CONNECT kumpara sa mga tugon ng destinasyon
Ihiwalay ang mga header ng CONNECT, pagpapatotoo, pag-redirect at huling tugon kapag gumagamit ng proxy ang paglilipat ng PHP cURL.
Kolektahin ang mga linya ng header nang hiwalay sa katawan ng tugon. Ang paglilipat sa pamamagitan ng proxy ay maaaring maghatid ng mga header ng CONNECT, pagpapatotoo, pag-redirect at tugon ng destinasyon sa isang operasyon:
$headerLines = [];
curl_setopt($handle, CURLOPT_HEADERFUNCTION,
function ($handle, $line) use (&$headerLines) {
$headerLines[] = $line;
return strlen($line);
}
);
Pinapanatili ng callback na ito ang hilaw na pagkakasunod-sunod ng linya at ibinabalik ang bilang ng mga byte na tinanggap. Tumatanggap ito ng kumpletong linya; ngunit hindi pa nito pinagsasama-sama ang mga ito sa mga tugon o pinipili ang mga header ng huling website.
Interpretuhin ang pagkakasunod-sunod bilang mga bloke
Ang linya ng status ng HTTP ay nagsisimula ng bloke ng tugon, at ang blangkong linya ay nagtatapos sa mga header nito. Pangalagaan ang mga hangganang iyon bago piliin ang huling tugon ng destinasyon. Ang mga intermediate na pagtatangkang magpatotoo at pag-redirect ay maaaring magdagdag ng mga bloke bawat isa.
Maaaring dumating ang mga trailer mamaya sa pamamagitan ng callback. Panatilihin ang sapat na estado ng parser upang makilala ang mga ito mula sa mga unang header, sa halip na ikabit ang bawat susunod na field sa unang tugon.
Panatilihin o pigilan ang ebidensya ng tunnel
Basahin ang CURLINFO_HTTP_CONNECTCODE nang hiwalay para sa status ng CONNECT ng tunnel ng HTTPS. Ang tinanggap na tunnel ay hindi nagpapatunay ng matagumpay na tugon ng website.
Kung hindi kailangan ng kolektor ang mga header ng CONNECT, kinokontrol ng CURLOPT_SUPPRESS_CONNECT_HEADERS ang paghahatid ng mga ito sa naka-configure na output ng header at sa mga landas ng callback. Suriin ang suporta sa naka-link na libcurl at build ng PHP. Pinapasimple ng pagpigil ang pagkolekta ngunit inaalis ang ebidensya ng tunnel sa antas ng header na makakatulong sa diagnosis.
Huwag ibalik ang katawan gamit ang fixed offset o sa pamamagitan ng paghahanap ng HTML tag. Nag-iiba ang laki ng header, nagkakaiba ang mga intermediate na tugon, at ang katawan ay maaaring binary o walang laman. Ang lumang ulat ng bug na partikular sa release ay hindi nagbibigay-katwiran sa hinulaang offset.
Ihiwalay ang paghawak sa katawan, at panatilihin ang error sa paglilipat kasama ang mga naobserbahang yugto ng tugon kung nabigo ang pagkolekta o pag-parse. Nakikilala nito ang naputol na callback, sirang data ng application at tinanggihang palitan ng proxy.