ਕੀ 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 ਨਹੀਂ ਚਲਾਉਂਦਾ। ਬ੍ਰਾਊਜ਼ਰ ਜੋ ਹਿੱਸੇ ਦਿਖਾਉਂਦਾ ਹੈ, ਉਹ ਭੇਜੇ ਗਏ ਹਰ ਬਾਈਟ ਦੇ ਪਹੁੰਚਣ ’ਤੇ ਵੀ ਮੂਲ ਪ੍ਰਤੀਕਿਰਿਆ ਵਿੱਚ ਨਹੀਂ ਹੋ ਸਕਦੇ।