נגישות       נגישות
שינוי גודל טקסט:
א א א
שינוי צבעי האתר:
? מקשי קיצור:

לחיצה חוזרת ונשנית על המקש Tab תעביר אתכם בין הקישורים והאזורים השונים בעמוד.

הפעלת מקשי הקיצור תלויה בדפדפן שבו אתם משתמשים.

Internet Explorer, Chrome ובגרסאות ישנות של Firefox: לחצו על מקש Alt ועל מקש המספר או האות על-פי הרשימה. ב Firefox 3 ומעלה: לחצו על המקשים Alt + Shift + המספר או האות.

S - עבור לתוכן הדף
L - חיפוש
1- עמוד הבית
2 - פרוייקטים
3 - מדריכים
4 - אודות
5 - צרו קשר
6 - הצהרת נגישות
 

מדריך cURL ב-PHP

מחבר:
בתאריך:

עבודה על צד השרת לא אומרת שכל המידע הנחוץ לנו חייב להימצא במסד הנתונים של האתר שעליו אנחנו עובדים. למעשה, באתרים מודרניים, חלקים הולכים וגדלים מהמידע שבו משתמשים בצד השרת מגיע ממקורות חיצוניים, לרוב באמצעות API המאפשר לגורם מצד שלישי לספק מידע לאתר שלנו גם בלי שתהיה לנו גישה למסד הנתונים על האתר המרוחק. כדי לצרוך את המידע הזה, ניתן להשתמש בהרחבת cURL, שמגיעה כחלק מ-PHP.

cURL היא הרחבת PHP, שמאפשרת לקבל ולשלוח מידע באמצעות תחביר ה-URL. ל-cURL שימושים חשובים ומעניינים שמקלים את התקשורת בין אתרים ודומיינים שונים. במדריך זה אציג 5 דוגמאות שימוש נפוצות ב-cURL:

  1. הורדת התוכן של אתר מרוחק
  2. הורדת קובץ מאתר מרוחק
  3. הגשה אוטומטית של טפסים
  4. הזדהות אוטומטית מול אתר מרוחק
  5. טיפול ב-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 = "http://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 = "http://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 = ""http://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 = "http://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 מה שמאפשר לנו, בין השאר, להגיש טפסים.

כדי להדגים את הגשת הטופס ניצור את שני הקבצים הבאים:

  1. index.php - שיבצע את הcURL.
  2. 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>

כדי להזין את הטופס עלינו להגדיר את שתי האופציות הבאות:

  1. CURLOPT_POST מגדיר שעובדים בפוסט.
  2. CURLOPT_POSTFIELDS , שמקבל מערך (postData$) של השדות שמעוניינים להזין ב-POST. שמות המפתחות במערך הם כשמות (name) של השדות שרוצים להזין.

<?php
$handle = curl_init();
 
$url = "http://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

כדי להזדהות מול אתר, צריך להגדיר את האופציות הבאות:

  1. CURLOPT_HTTPAUTH
  2. CURLOPT_USERPWD - באמצעותו נגדיר את שם המשתמש והססמה.
  3. 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.

האופציות החשובות ביותר לצורך כך הם :

  1. CURLOPT_COOKIEJAR , שמגדיר את הקובץ שלתוכו צריך לכתוב את ה-cookies.
  2. CURLOPT_COOKIEFILE , שמתוכו קוראים את ה-cookies, כששבים לאתר.

הדוגמה הבאה כותבת את ה-cookies באתר לקובץ cookie.txt, וקוראת ממנו בכל פעם כשחוזרים לאתר.

 

<?php
 
$handle = curl_init();
 
$url = "http://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 כדי למשוך מידע אודות משתמש שמעוניין להירשם לאתר שלכם מרשתות חברתיות.

 

לכל מדריכי ה-PHP

 

הוסף תגובה חדשה

 

= 6 + 4

תמונת המגיב

שגיב בתאריך: 22.09.2015

שלום,
בדוגמא השנייה:
יש את השורה: __DIR__ . DIRECTORY_SEPARATOR . [בשם של המתנה file]

לא הבנתי מה זה אומר.
גמר חתימה טובה,
שגיב

תמונת המגיב

יוסי בתאריך: 23.09.2015

DIR זו התיקייה הנוכחית
DIRECTORY_SEPARATOR מפריד בין התיקיות בנתיב שמוביל לקובץ. במקום slash בלינוקס או backslash בחלונות.

שנה טובה.