מדריך cURL ב-PHP
עבודה על צד השרת לא אומרת שכל המידע הנחוץ לנו חייב להימצא במסד הנתונים של האתר שעליו אנחנו עובדים. למעשה, באתרים מודרניים, חלקים הולכים וגדלים מהמידע שבו משתמשים בצד השרת מגיע ממקורות חיצוניים, לרוב באמצעות API המאפשר לגורם מצד שלישי לספק מידע לאתר שלנו גם בלי שתהיה לנו גישה למסד הנתונים על האתר המרוחק. כדי לצרוך את המידע הזה, ניתן להשתמש בהרחבת cURL, שמגיעה כחלק מ-PHP.
cURL היא הרחבת PHP, שמאפשרת לקבל ולשלוח מידע באמצעות תחביר ה-URL. ל-cURL שימושים חשובים ומעניינים שמקלים את התקשורת בין אתרים ודומיינים שונים. במדריך זה אציג 5 דוגמאות שימוש נפוצות ב-cURL:
- הורדת התוכן של אתר מרוחק
- הורדת קובץ מאתר מרוחק
- הגשה אוטומטית של טפסים
- הזדהות אוטומטית מול אתר מרוחק
- טיפול ב-cookies
כיצד cURL עובד?
cURL עובד באמצעות שליחת בקשה לאתר, שכוללת את ארבעת החלקים הבאים:
1. איתחול הבקשה.
$handle = curl_init();
2. הגדרת האופציות. יש אופציות רבות, לדוגמה אופציה שמגדירה את ה-URL:
curl_setopt($handle, CURLOPT_URL, $url);
3. הוצאה לפועל ותפיסת התגובה המוחזרת.
$data = curl_exec($handle);
4. שחרור ידית ה-curl.
curl_close($handle);
החלק השני הוא המעניין ביותר מפני שניתן להגדיר באמצעותו בצורה מאוד מדויקת את הבקשה שאנו מעוניינים לשלוח. בהתאם, יש הרבה אופציות, שחלק קטן מהם נראה במדריך.
דוגמה ראשונה : כיצד להוריד תוכן של אתר מרוחק לקובץ מקומי?
כדי להוריד את תוכנו של אתר מרוחק נגדיר את האופציות הבאות:
CURLOPT_URL , שמגדיר את ה-URL שאליו אנו מפנים.
CURLOPT_RETURNTRANSFER , מאפשר להציב את המידע שהורדנו מהאתר המרוחק לתוך משתנה. בדוגמה זו, אנו מציבים את המידע לתוך המשתנה $output.
<?php
$handle = curl_init();
$url = "//www.ladygaga.com";
// Set the url
curl_setopt($handle, CURLOPT_URL, $url);
// Set the result output to be a string.
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($handle);
curl_close($handle);
echo $output;
כשנדפיס את ערך המשתנה $output נוכל לצפות בגרסה המקומית של האתר של הזמרת הכי טובה בעולם.
את האופציות ניתן לכתוב באופן קומפקטי יותר באמצעות curl_setopt_array , שמכנס את האופציות לתוך מערך.
curl_setopt_array($handle,
array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true
)
);
דוגמה שנייה: כיצד להוריד קובץ מאתר מרוחק באמצעות cURL?
ניתן להוריד קובץ מרוחק אל השרת שלנו אם מגדירים את האופציה CURLOPTֹֹ_FILE . לדוגמה, הקוד הבא שמוריד את כל הספר "The Divine Comedy" מפרויקט גוטנברג לתוך הקובץ the_divine_comedy.html שנמצא באותה תיקייה כמו קובץ ה-PHP שלנו :
<?php
// The distant site url.
$url = "//www.gutenberg.org/files/46852/46852-h/46852-h.htm";
// The file on our server.
$file = __DIR__ . DIRECTORY_SEPARATOR . "the_divine_comedy.html";
$handle = curl_init();
// Open the file on our server for writing.
$fileHandle = fopen($file, "w");
curl_setopt_array($handle,
array(
CURLOPT_URL => $url,
CURLOPT_FILE => $fileHandle,
)
);
$data = curl_exec($handle);
curl_close($handle);
fclose($fileHandle);
טיפול בתגובה המוחזרת
על מנת לקבל את הפרמטרים של התגובה לצרכי דיבוג ומעקב נגדיר את האופציה CURLOPT_HEADER. לדוגמה:
<?php
$url = ""//www.gutenberg.org/files/41537/41537-h/41537-h.htm";
$file = __DIR__ . DIRECTORY_SEPARATOR . "the_divine_comedy.html";
$handle = curl_init();
$fileHandle = fopen($file, "w");
curl_setopt_array($handle,
array(
CURLOPT_URL => $url,
CURLOPT_FILE => $fileHandle,
CURLOPT_HEADER => true
)
);
$data = curl_exec($handle);
כדי לחלץ את המידע הנוסף אודות הבקשה, משתמשים בפקודה curl_getinfo שמשמשת אותנו כדי לקבל מידע טכני חשוב אודות התגובה כדוגמת, קוד התגובה (200 לתגובה תקינה) וגודל הקובץ שהורדנו.
$responseCode =
curl_getinfo($handle,
CURLINFO_HTTP_CODE
);
$downloadLength =
curl_getinfo
($handle,
CURLINFO_CONTENT_LENGTH_DOWNLOAD);
בנוסף, חשוב לקבל הודעות שגיאה בשלב הדיבוג, ולצורך כך משתמשים בפקודות curl_errno ו- curl_error .
if(curl_errno($handle))
{
print curl_error($handle);
}
כך יראה הקוד המלא:
<?php
$url = "//www.gutenberg.org/files/46852/46852-h/46852-h.htm";
$file = __DIR__ . DIRECTORY_SEPARATOR . "the_divine_comedy.html";
$handle = curl_init();
$fileHandle = fopen($file, "w");
curl_setopt_array($handle,
array(
CURLOPT_URL => $url,
CURLOPT_FILE => $fileHandle,
CURLOPT_HEADER => true
)
);
$data = curl_exec($handle);
$responseCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
$downloadLength = curl_getinfo($handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
if(curl_errno($handle))
{
print curl_error($handle);
}
else
{
if($responseCode == "200") echo "successful request";
echo " # download length : " . $downloadLength;
curl_close($handle);
fclose($fileHandle);
}
דוגמה שלישית: הגשה אוטומטית של טפסים
עד עכשיו למדנו לעשות GET, אבל ניתן לעשות גם POST מה שמאפשר לנו, בין השאר, להגיש טפסים.
כדי להדגים את הגשת הטופס ניצור את שני הקבצים הבאים:
- index.php - שיבצע את הcURL.
- theForm.php - הקובץ שיכיל את הטופס.
הקובץ theForm.php, יימצא במציאות על שרת מרוחק (אם כי, לצורך הדוגמה, ניתן למקם את שני הקבצים באותו שרת). בדוגמה ישמש טופס ובו 3 שדות: firstName, lastName ו-submit.
<?php
if(isset($_POST["submit"]))
{
echo "Full name is " . $_POST["firstName"] .
" " . $_POST["lastName"];
exit;
}
?>
<html>
<body>
<form method = "POST" action = "" >
<input name="firstName" type="text">
<input name="lastName" type="text">
<input type="submit" name="submit" value="שלח" >
</form>
</body>
</html>
כדי להזין את הטופס עלינו להגדיר את שתי האופציות הבאות:
- CURLOPT_POST מגדיר שעובדים בפוסט.
- CURLOPT_POSTFIELDS , שמקבל מערך (postData$) של השדות שמעוניינים להזין ב-POST. שמות המפתחות במערך הם כשמות (name) של השדות שרוצים להזין.
<?php
$handle = curl_init();
$url = "//localhost/curl/theForm.php";
// Array with the fields names and values.
// The field names should match the field names in the form.
$postData = array(
'firstName' => 'Lady',
'lastName' => 'Gaga',
'submit' => 'ok'
);
curl_setopt_array($handle,
array(
CURLOPT_URL => $url,
// Enable the post response.
CURLOPT_POST => true,
// The data to transfer with the response.
CURLOPT_POSTFIELDS => $postData,
CURLOPT_RETURNTRANSFER => true,
)
);
$data = curl_exec($handle);
curl_close($handle);
echo $data;
דוגמה רביעית : הזדהות מול אתר באמצעות cURL
כדי להזדהות מול אתר, צריך להגדיר את האופציות הבאות:
- CURLOPT_HTTPAUTH
- CURLOPT_USERPWD - באמצעותו נגדיר את שם המשתמש והססמה.
- CURLOPT_RETURNTRANSFER
וכך נראה הקוד:
curl_setopt_array($handle,
array(
CURLOPT_URL => $url,
CURLOPT_HTTPAUTH => CURLAUTH_ANY,
CURLOPT_USERPWD => "$username:$password",
CURLOPT_RETURNTRANSFER => true,
)
);
דוגמה חמישית : שימוש ב-COOKIES
שימוש ב-cookies מאפשר לנו להזדהות מול האתר בכל פעם שאנחנו חוזרים אליו. לצורך כך, cURL מספק לנו מנגנון שדרכו אנו יכולים לשמור cookies.
האופציות החשובות ביותר לצורך כך הם :
- CURLOPT_COOKIEJAR , שמגדיר את הקובץ שלתוכו צריך לכתוב את ה-cookies.
- CURLOPT_COOKIEFILE , שמתוכו קוראים את ה-cookies, כששבים לאתר.
הדוגמה הבאה כותבת את ה-cookies באתר לקובץ cookie.txt, וקוראת ממנו בכל פעם כשחוזרים לאתר.
<?php
$handle = curl_init();
$url = "//www.ladygaga.com/artrave-the-artpop-ball";
$file = __DIR__ . DIRECTORY_SEPARATOR . "cookie.txt";
curl_setopt_array($handle,
array(
CURLOPT_URL => $url,
// The file to which the cookies need to be written.
CURLOPT_COOKIEFILE => $file,
// The file freom which the cookies need to be read.
CURLOPT_COOKIEJAR => $file,
CURLOPT_RETURNTRANSFER => true,
)
);
$data = curl_exec($handle);
curl_close($handle);
לסיכום
שימוש בהרחבת cURL של PHP מספקת לנו דרך נוחה להתממשק עם אתרים אחרים ובפרט API שמספק גורם שלישי. במדריך הבא תוכלו ללמוד כיצד ליהעזר ב-cURL כדי למשוך מידע אודות משתמש שמעוניין להירשם לאתר שלכם מרשתות חברתיות.
אהבתם? לא אהבתם? דרגו!
0 הצבעות, ממוצע 0 מתוך 5 כוכבים
המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.
למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.
שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.
המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?
השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.