התחילו בתוצאה של cURL כאשר דף שהורד דרך פרוקסי נראה חסר. תגובה קצרה, העברה שנכשלה ודף חסימה מלא דורשים הסברים שונים.

כאשר CURLOPT_RETURNTRANSFER מופעל על ה-handle המוגדר הקיים:

$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 קטנה עשויה להיות הדף כולו שהמקור או הפרוקסי בחרו להחזיר.

לבסוף בדקו את התוכן הנדרש. HTML שנמשך ב-cURL אינו מריץ JavaScript כדי למלא את הדף. ייתכן שקטעים שהדפדפן מציג יחסרו מהתגובה המקורית גם כאשר כל בייט שנשלח הגיע.

מאמרים קשורים