PHP cURL starpniekservera galvenes: CONNECT pret galamērķa atbildēm
Turiet atsevišķi CONNECT, autentifikācijas, novirzīšanas un galīgās atbildes galvenes, kad PHP cURL pārsūtīšana izmanto starpniekserveri.
Vāciet galveņu rindas atsevišķi no atbildes pamatteksta. Pārsūtīšana caur starpniekserveri var vienā darbībā piegādāt CONNECT, autentifikācijas, novirzīšanas un galamērķa atbildes galvenes:
$headerLines = [];
curl_setopt($handle, CURLOPT_HEADERFUNCTION,
function ($handle, $line) use (&$headerLines) {
$headerLines[] = $line;
return strlen($line);
}
);
Šis atzvanīšanas izsaukums saglabā neapstrādāto rindu secību un atgriež pieņemto baitu skaitu. Tas saņem pilnas rindas; tomēr vēl negrupē tās atbildēs un neizvēlas galīgās vietnes galvenes.
Interpretējiet secību kā blokus
HTTP statusa rinda sāk atbildes bloku, un tukša rinda beidz tā galvenes. Saglabājiet šīs robežas pirms galīgās galamērķa atbildes izvēles. Starpposma autentifikācijas mēģinājumi un novirzīšanas katrs var pievienot blokus.
Traileri var ierasties vēlāk caur atzvanīšanas izsaukumu. Turiet pietiekami daudz parsētāja stāvokļa, lai tos atšķirtu no sākotnējām galvenēm, tā vietā lai katru vēlāko lauku piesaistītu pirmajai atbildei.
Saglabājiet vai nomāciet tuneļa pierādījumu
Lasiet CURLINFO_HTTP_CONNECTCODE atsevišķi HTTPS tuneļa CONNECT statusam. Pieņemts tunelis nepierāda veiksmīgu vietnes atbildi.
Ja savācējam CONNECT galvenes nav vajadzīgas, CURLOPT_SUPPRESS_CONNECT_HEADERS kontrolē to piegādi konfigurētajai galveņu izvadei un atzvanīšanas ceļiem. Pārbaudiet atbalstu saistītajā libcurl un PHP būvējumā. Nomākšana vienkāršo vākšanu, bet noņem galveņu līmeņa tuneļa pierādījumu, kas var palīdzēt diagnostikā.
Neatjaunojiet pamattekstu ar fiksētu nobīdi vai meklējot HTML tagu. Galveņu izmēri atšķiras, starpposma atbildes atšķiras, un pamatteksts var būt binārs vai tukšs. Vecs konkrētas versijas kļūdas ziņojums neattaisno minēto nobīdi.
Turiet pamatteksta apstrādi atsevišķi un saglabājiet pārsūtīšanas kļūdu kopā ar novērotajiem atbildes posmiem, ja vākšana vai parsēšana neizdodas. Tas atšķir pārtrauktu atzvanīšanas izsaukumu, sabojātus lietojumprogrammas datus un noraidītu starpniekservera apmaiņu.