പ്രോക്സി വഴി ഡൗൺലോഡ് ചെയ്ത പേജ് അപൂർണമെന്ന് തോന്നുമ്പോൾ 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 പ്രവർത്തിപ്പിക്കുന്നില്ല. ബ്രൗസർ കാണിക്കുന്ന ഭാഗങ്ങൾ, അയച്ച ഓരോ ബൈറ്റും എത്തിയാലും യഥാർത്ഥ പ്രതികരണത്തിൽ ഇല്ലായിരിക്കാം.

അനുബന്ധ ലേഖനങ്ങൾ