PHP cURL-prokurilaj ĉeflinioj: CONNECT kontraŭ celaj respondoj
Tenu apartaj la ĉefliniojn de CONNECT, aŭtentigado, alidirektado kaj fina respondo, kiam PHP cURL-transigo uzas prokurilon.
Kolektu ĉefliniojn aparte de la responda korpo. Transigo tra prokurilo povas liveri ĉefliniojn de CONNECT, aŭtentigado, alidirektado kaj cela respondo en unu operacio:
$headerLines = [];
curl_setopt($handle, CURLOPT_HEADERFUNCTION,
function ($handle, $line) use (&$headerLines) {
$headerLines[] = $line;
return strlen($line);
}
);
Ĉi tiu retrovoko konservas la krudan linian sinsekvon kaj redonas la nombron de akceptitaj bajtoj. Ĝi ricevas plenajn liniojn; tamen ĝi ankoraŭ ne grupigas ilin en respondojn nek elektas la ĉefliniojn de la fina retejo.
Interpretu la sinsekvon kiel blokojn
HTTP-stata linio komencas respondan blokon, kaj malplena linio finas ĝiajn ĉefliniojn. Konservu tiujn limojn antaŭ ol elekti la finan celan respondon. Interaj aŭtentigaj provoj kaj alidirektadoj povas ĉiu aldoni blokojn.
Postsekvaj ĉeflinioj (trailer) povas alveni pli poste per la retrovoko. Tenu sufiĉan analizilan staton por distingi ilin de la komencaj ĉeflinioj, anstataŭ alkroĉi ĉiun postan kampon al la unua respondo.
Konservu aŭ subpremu la pruvon de la tunelo
Legu CURLINFO_HTTP_CONNECTCODE aparte por la CONNECT-stato de la HTTPS-tunelo. Akceptita tunelo ne pruvas sukcesan retejan respondon.
Se la kolektanto ne bezonas CONNECT-ĉefliniojn, CURLOPT_SUPPRESS_CONNECT_HEADERS regas ilian liveradon al la agordita ĉeflinia eligado kaj retrovokaj vojoj. Kontrolu subtenon en la ligita libcurl kaj PHP-konstruo. Subpremado simpligas kolektadon sed forigas ĉeflinian tunelopruvon, kiu povas helpi diagnozon.
Ne rekuperu la korpon per fiksa deŝovo aŭ serĉante HTML-etikedon. Ĉefliniaj grandoj varias, interaj respondoj malsamas, kaj la korpo povas esti duuma aŭ malplena. Malnova erar-raporto specifa al eldono ne pravigas supozitan deŝovon.
Tenu korpan prilaboradon aparte, kaj konservu la transigan eraron kune kun la observitaj respondaj etapoj, se kolektado aŭ analizado malsukcesas. Tio distingas interrompitan retrovokon, misformajn aplikaĵajn datumojn kaj rifuzitan prokurilan interŝanĝon.