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 ಚಲಾಯಿಸುವುದಿಲ್ಲ. ಪ್ರತಿ ರವಾನೆಯಾದ ಬೈಟ್ ಬಂದರೂ ಬ್ರೌಸರ್ ತೋರಿಸುವ ವಿಭಾಗಗಳು ಮೂಲ ಪ್ರತಿಕ್ರಿಯೆಯಲ್ಲಿ ಇಲ್ಲದಿರಬಹುದು.