PHP cURL ప్రతిస్పందన కత్తిరించబడిందా?
డౌన్లోడ్ చేసిన పరిమాణాన్ని Content-Length తో పోల్చే ముందు cURL బదిలీ ఫలితం, ప్రతిస్పందన స్థితి మరియు బాడీ ప్రాతినిధ్యాన్ని తనిఖీ చేయండి.
ప్రాక్సీ ద్వారా డౌన్లోడ్ చేసిన పేజీ అసంపూర్ణంగా కనిపించినప్పుడు cURL ఫలితంతో ప్రారంభించండి. చిన్న ప్రతిస్పందన, విఫలమైన బదిలీ మరియు పూర్తి బ్లాక్ పేజీకి వేర్వేరు వివరణలు అవసరం.
ఇప్పటికే కాన్ఫిగర్ చేసిన handle పై CURLOPT_RETURNTRANSFER ప్రారంభించి ఉన్నప్పుడు:
$body = curl_exec($ch);
if ($body === false) {
throw new RuntimeException(curl_error($ch), curl_errno($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$downloaded = curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD_T);
$declared = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T);
handle విడుదల చేయడానికి ముందు ఈ విలువలను సేకరించండి. కఠినమైన పోలిక బదిలీ వైఫల్యాన్ని ఖాళీ స్ట్రింగ్ లేదా “0” వంటి విజయవంతమైన బాడీల నుండి వేరు చేస్తుంది. HTTP లోప స్థితులు స్వయంచాలకంగా curl_exec వైఫల్యాలు కావు, కాబట్టి స్థితిని కూడా అర్థం చేసుకోండి.
డౌన్లోడ్ కౌంటర్ హెడర్లను కలుపుకోదు. ప్రకటించిన విలువ Content-Length నుండి వస్తుంది మరియు పరిమాణం తెలియనప్పుడు -1 అవుతుంది. ప్రతిస్పందన చట్టబద్ధంగా Content-Length ను వదిలివేయవచ్చు; తెలియని విలువ కత్తిరించిన ఫైల్ నిర్ధారణ కాదు.
స్వయంచాలక కంటెంట్ డీకోడింగ్ మరో భేదాన్ని తెస్తుంది. Content-Length సాధారణంగా కుదించిన ప్రాతినిధ్యాన్ని వివరిస్తుంది, అయితే PHP స్ట్రింగ్లో డీకంప్రెస్ చేసిన బైట్లు ఉండవచ్చు. strlen($body) ను ఆ హెడర్తో పోల్చడం వేర్వేరు ప్రాతినిధ్యాలను పోల్చడం.
బదిలీ ఆశించిన పరిమాణాన్ని ఉల్లంఘించినప్పుడు cURL CURLE_PARTIAL_FILE ను నివేదించవచ్చు. ఖాళీ కాని ఏదైనా అవుట్పుట్ను విజయంగా పరిగణించడం బదులు ఆ లోపాన్ని భద్రపరచండి. దీనికి విరుద్ధంగా, చిన్న 200 ప్రతిస్పందనతో విజయవంతమైన బదిలీ మూలం లేదా ప్రాక్సీ తిరిగి ఇవ్వాలని ఎంచుకున్న మొత్తం పేజీ కావచ్చు.
చివరగా అవసరమైన కంటెంట్ను తనిఖీ చేయండి. cURL తెచ్చే HTML పేజీని నింపడానికి JavaScript ను అమలు చేయదు. పంపిన ప్రతి బైట్ వచ్చినా బ్రౌజర్ చూపే విభాగాలు అసలు ప్రతిస్పందనలో ఉండకపోవచ్చు.