آموزش CURL در PHP

CURL, Client URL Library Functions

معرفی
PHP از libcurl (کتابخانه ای که توسط Daniel Stenberg درست شده است) پشتیبانی می کند. این کتابخانه یه شما امکان اتصال به سرور ها مختلف با پروتکل های متفاوت را می دهد. libcurl در حال حاضر از پروتکل های http, https, ftp, gopher, telnet, dict, file و ldap پشتیبانی می کند. همچنین libcurl از HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies و user+password authentication پشتیبانی می کند.
تابع های CURL از PHP 4.0.2 به بعد افزوده شده اند.

موارد مورد نیاز
نصب بسته libcurl (اینجا کلیک کنید. PHP به libcurl 7.0.2-beta یا بالاتر نیاز دارد.)
libcurl 7.9.0 با بالاتر برای PHP 4.2.3
libcurl 7.9.8 یا بالاتر برای PHP 4.3.0
libcurl 7.10.5 یا بالاتر برای PHP 5.0.0

توضیحات آموزشی
بعد از راه اندازی PHP با پشتیبانی از CURL شما می توانید از تابع های CURL استفاده نمائید. اولین کاری که نیاز به انجام آن دارید استفاده از تابع curl_init() برای شروع یک session (جلسه) CURL است. سپس با استفاده از تابع curl_setopt() گزینه های مختلف (options) را set (تنظیم) نمائید. حال با استفاده از تابع curl_exec() می توانید session CURL را اجرا نمائید. در آخرین مرحله session CURL را با اجرای تابع curl_close() از بین ببرید.

توابع CURL
curl_close : بستن (از بین بردن؟) session CURL فعلی
curl_copy_handle : کپی کردن یک CURL handle به همراه تمامی تنظیمات آن (از PHP 5 به بعد قابل استفاده می باشد)
curl_errno : آخرین شماره خطا را باز می گرداند
curl_error : آخرین خطای session فعلی را به صورت یک string (رشته) باز می گرداند
curl_exec : اجرای CURL
curl_getinfo : نمایش اطلاعات یک تبادل
curl_init : شروع یک session جدید
curl_setopt : تنظیم کردن (set) یک گزینه (option)
curl_setopt_array : تنظیم کردن (set) همزمان چند گزینه مختلف (options)
curl_version : نسخه CURL مورد استفاده را باز می گرداند.

توابع زیر از PHP 5 به بعد قابل استفاده می باشند:

curl_multi_add_handle : Add a normal cURL handle to a cURL multi handle
curl_multi_close : Close a set of cURL handles
curl_multi_exec : Run the sub-connections of the current cURL handle
curl_multi_getcontent : Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set
curl_multi_info_read : Get information about the current transfers
curl_multi_init : Returns a new cURL multi handle
curl_multi_remove_handle : Remove a multi handle from a set of cURL handles
curl_multi_select : Get all the sockets associated with the cURL extension, which can then be “selected”

ثابت های CURL (Predefined Constants)
بعد از راه اندازی CURL تعدادی ثابت مربوط به CURL در دسترس قرار می گیرند. لیست این تابت های در زیر آمده است:

CURLOPT_AUTOREFERER (integer)
    Available since PHP 5.1.0
CURLOPT_COOKIESESSION (integer)
    Available since PHP 5.1.0
CURLOPT_DNS_USE_GLOBAL_CACHE (integer)
CURLOPT_DNS_CACHE_TIMEOUT (integer)
CURLOPT_FTPSSLAUTH (integer)
    Available since PHP 5.1.0
CURLOPT_PORT (integer)
CURLOPT_FILE (integer)
CURLOPT_INFILE (integer)
CURLOPT_INFILESIZE (integer)
CURLOPT_URL (integer)
CURLOPT_PROXY (integer)
CURLOPT_VERBOSE (integer)
CURLOPT_HEADER (integer)
CURLOPT_HTTPHEADER (integer)
CURLOPT_NOPROGRESS (integer)
CURLOPT_NOBODY (integer)
CURLOPT_FAILONERROR (integer)
CURLOPT_UPLOAD (integer)
CURLOPT_POST (integer)
CURLOPT_FTPLISTONLY (integer)
CURLOPT_FTPAPPEND (integer)
CURLOPT_NETRC (integer)
CURLOPT_FOLLOWLOCATION (integer)
CURLOPT_FTPASCII (integer)
CURLOPT_PUT (integer)
CURLOPT_MUTE (integer)
CURLOPT_USERPWD (integer)
CURLOPT_PROXYUSERPWD (integer)
CURLOPT_RANGE (integer)
CURLOPT_TIMEOUT (integer)
CURLOPT_POSTFIELDS (integer)
CURLOPT_REFERER (integer)
CURLOPT_USERAGENT (integer)
CURLOPT_FTPPORT (integer)
CURLOPT_FTP_USE_EPSV (integer)
CURLOPT_LOW_SPEED_LIMIT (integer)
CURLOPT_LOW_SPEED_TIME (integer)
CURLOPT_RESUME_FROM (integer)
CURLOPT_COOKIE (integer)
CURLOPT_SSLCERT (integer)
CURLOPT_SSLCERTPASSWD (integer)
CURLOPT_WRITEHEADER (integer)
CURLOPT_SSL_VERIFYHOST (integer)
CURLOPT_COOKIEFILE (integer)
CURLOPT_SSLVERSION (integer)
CURLOPT_TIMECONDITION (integer)
CURLOPT_TIMEVALUE (integer)
CURLOPT_CUSTOMREQUEST (integer)
CURLOPT_STDERR (integer)
CURLOPT_TRANSFERTEXT (integer)
CURLOPT_RETURNTRANSFER (integer)
CURLOPT_QUOTE (integer)
CURLOPT_POSTQUOTE (integer)
CURLOPT_INTERFACE (integer)
CURLOPT_KRB4LEVEL (integer)
CURLOPT_HTTPPROXYTUNNEL (integer)
CURLOPT_FILETIME (integer)
CURLOPT_WRITEFUNCTION (integer)
CURLOPT_READFUNCTION (integer)
CURLOPT_PASSWDFUNCTION (integer)
CURLOPT_HEADERFUNCTION (integer)
CURLOPT_MAXREDIRS (integer)
CURLOPT_MAXCONNECTS (integer)
CURLOPT_CLOSEPOLICY (integer)
CURLOPT_FRESH_CONNECT (integer)
CURLOPT_FORBID_REUSE (integer)
CURLOPT_RANDOM_FILE (integer)
CURLOPT_EGDSOCKET (integer)
CURLOPT_CONNECTTIMEOUT (integer)
CURLOPT_SSL_VERIFYPEER (integer)
CURLOPT_CAINFO (integer)
CURLOPT_CAPATH (integer)
CURLOPT_COOKIEJAR (integer)
CURLOPT_SSL_CIPHER_LIST (integer)
CURLOPT_BINARYTRANSFER (integer)
CURLOPT_NOSIGNAL (integer)
CURLOPT_PROXYTYPE (integer)
CURLOPT_BUFFERSIZE (integer)
CURLOPT_HTTPGET (integer)
CURLOPT_HTTP_VERSION (integer)
CURLOPT_SSLKEY (integer)
CURLOPT_SSLKEYTYPE (integer)
CURLOPT_SSLKEYPASSWD (integer)
CURLOPT_SSLENGINE (integer)
CURLOPT_SSLENGINE_DEFAULT (integer)
CURLOPT_SSLCERTTYPE (integer)
CURLOPT_CRLF (integer)
CURLOPT_ENCODING (integer)
CURLOPT_PROXYPORT (integer)
CURLOPT_UNRESTRICTED_AUTH (integer)
CURLOPT_FTP_USE_EPRT (integer)
CURLOPT_HTTP200ALIASES (integer)
CURLOPT_HTTPAUTH (integer)
CURLAUTH_BASIC (integer)
CURLAUTH_DIGEST (integer)
CURLAUTH_GSSNEGOTIATE (integer)
CURLAUTH_NTLM (integer)
CURLAUTH_ANY (integer)
CURLAUTH_ANYSAFE (integer)
CURLOPT_PROXYAUTH (integer)
CURLCLOSEPOLICY_LEAST_RECENTLY_USED (integer)
CURLCLOSEPOLICY_LEAST_TRAFFIC (integer)
CURLCLOSEPOLICY_SLOWEST (integer)
CURLCLOSEPOLICY_CALLBACK (integer)
CURLCLOSEPOLICY_OLDEST (integer)
CURLINFO_EFFECTIVE_URL (integer)
CURLINFO_HTTP_CODE (integer)
CURLINFO_HEADER_SIZE (integer)
CURLINFO_REQUEST_SIZE (integer)
CURLINFO_TOTAL_TIME (integer)
CURLINFO_NAMELOOKUP_TIME (integer)
CURLINFO_CONNECT_TIME (integer)
CURLINFO_PRETRANSFER_TIME (integer)
CURLINFO_SIZE_UPLOAD (integer)
CURLINFO_SIZE_DOWNLOAD (integer)
CURLINFO_SPEED_DOWNLOAD (integer)
CURLINFO_SPEED_UPLOAD (integer)
CURLINFO_FILETIME (integer)
CURLINFO_SSL_VERIFYRESULT (integer)
CURLINFO_CONTENT_LENGTH_DOWNLOAD (integer)
CURLINFO_CONTENT_LENGTH_UPLOAD (integer)
CURLINFO_STARTTRANSFER_TIME (integer)
CURLINFO_CONTENT_TYPE (integer)
CURLINFO_REDIRECT_TIME (integer)
CURLINFO_REDIRECT_COUNT (integer)
CURL_VERSION_IPV6 (integer)
CURL_VERSION_KERBEROS4 (integer)
CURL_VERSION_SSL (integer)
CURL_VERSION_LIBZ (integer)
CURLVERSION_NOW (integer)
CURLE_OK (integer)
CURLE_UNSUPPORTED_PROTOCOL (integer)
CURLE_FAILED_INIT (integer)
CURLE_URL_MALFORMAT (integer)
CURLE_URL_MALFORMAT_USER (integer)
CURLE_COULDNT_RESOLVE_PROXY (integer)
CURLE_COULDNT_RESOLVE_HOST (integer)
CURLE_COULDNT_CONNECT (integer)
CURLE_FTP_WEIRD_SERVER_REPLY (integer)
CURLE_FTP_ACCESS_DENIED (integer)
CURLE_FTP_USER_PASSWORD_INCORRECT (integer)
CURLE_FTP_WEIRD_PASS_REPLY (integer)
CURLE_FTP_WEIRD_USER_REPLY (integer)
CURLE_FTP_WEIRD_PASV_REPLY (integer)
CURLE_FTP_WEIRD_227_FORMAT (integer)
CURLE_FTP_CANT_GET_HOST (integer)
CURLE_FTP_CANT_RECONNECT (integer)
CURLE_FTP_COULDNT_SET_BINARY (integer)
CURLE_PARTIAL_FILE (integer)
CURLE_FTP_COULDNT_RETR_FILE (integer)
CURLE_FTP_WRITE_ERROR (integer)
CURLE_FTP_QUOTE_ERROR (integer)
CURLE_HTTP_NOT_FOUND (integer)
CURLE_WRITE_ERROR (integer)
CURLE_MALFORMAT_USER (integer)
CURLE_FTP_COULDNT_STOR_FILE (integer)
CURLE_READ_ERROR (integer)
CURLE_OUT_OF_MEMORY (integer)
CURLE_OPERATION_TIMEOUTED (integer)
CURLE_FTP_COULDNT_SET_ASCII (integer)
CURLE_FTP_PORT_FAILED (integer)
CURLE_FTP_COULDNT_USE_REST (integer)
CURLE_FTP_COULDNT_GET_SIZE (integer)
CURLE_HTTP_RANGE_ERROR (integer)
CURLE_HTTP_POST_ERROR (integer)
CURLE_SSL_CONNECT_ERROR (integer)
CURLE_FTP_BAD_DOWNLOAD_RESUME (integer)
CURLE_FILE_COULDNT_READ_FILE (integer)
CURLE_LDAP_CANNOT_BIND (integer)
CURLE_LDAP_SEARCH_FAILED (integer)
CURLE_LIBRARY_NOT_FOUND (integer)
CURLE_FUNCTION_NOT_FOUND (integer)
CURLE_ABORTED_BY_CALLBACK (integer)
CURLE_BAD_FUNCTION_ARGUMENT (integer)
CURLE_BAD_CALLING_ORDER (integer)
CURLE_HTTP_PORT_FAILED (integer)
CURLE_BAD_PASSWORD_ENTERED (integer)
CURLE_TOO_MANY_REDIRECTS (integer)
CURLE_UNKNOWN_TELNET_OPTION (integer)
CURLE_TELNET_OPTION_SYNTAX (integer)
CURLE_OBSOLETE (integer)
CURLE_SSL_PEER_CERTIFICATE (integer)
CURLE_GOT_NOTHING (integer)
CURLE_SSL_ENGINE_NOTFOUND (integer)
CURLE_SSL_ENGINE_SETFAILED (integer)
CURLE_SEND_ERROR (integer)
CURLE_RECV_ERROR (integer)
CURLE_SHARE_IN_USE (integer)
CURLE_SSL_CERTPROBLEM (integer)
CURLE_SSL_CIPHER (integer)
CURLE_SSL_CACERT (integer)
CURLE_BAD_CONTENT_ENCODING (integer)
CURLE_LDAP_INVALID_URL (integer)
CURLE_FILESIZE_EXCEEDED (integer)
CURLE_FTP_SSL_FAILED (integer)
CURLFTPAUTH_DEFAULT (integer)
    Available since PHP 5.1.0
CURLFTPAUTH_SSL (integer)
    Available since PHP 5.1.0
CURLFTPAUTH_TLS (integer)
    Available since PHP 5.1.0
CURLPROXY_HTTP (integer)
CURLPROXY_SOCKS5 (integer)
CURL_NETRC_OPTIONAL (integer)
CURL_NETRC_IGNORED (integer)
CURL_NETRC_REQUIRED (integer)
CURL_HTTP_VERSION_NONE (integer)
CURL_HTTP_VERSION_1_0 (integer)
CURL_HTTP_VERSION_1_1 (integer)
CURLM_CALL_MULTI_PERFORM (integer)
CURLM_OK (integer)
CURLM_BAD_HANDLE (integer)
CURLM_BAD_EASY_HANDLE (integer)
CURLM_OUT_OF_MEMORY (integer)
CURLM_INTERNAL_ERROR (integer)
CURLMSG_DONE (integer)

مثال ها
1- کد زیر محتویات آدرس http://dev.cheshmak.net را در فایل dev_hompage.txt ذخیره می نماید:

<?php

$ch = curl_init("http://dev.cheshmak.net/");
$fp = fopen("dev_homepage.txt", "w");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);
curl_close($ch);
fclose($fp);
?>

2- نمایش آدرس http://dev.cheshmak.net :

<?php
$ch = curl_init() or die(curl_error());
curl_setopt($ch, CURLOPT_URL,"http://dev.cheshmak.net");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data1=curl_exec($ch) or die(curl_error());
echo  $data1;
echo curl_error($ch);
curl_close($ch);
?>

3- نمایش آدرس http://dev.cheshmak.net به همراه ارسال پارامتر به صورت POST :

<?php
$a=$_POST["a"]; // Form posted value
$ch = curl_init() or die(curl_error());
$params="a=$a";
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$params);
curl_setopt($ch, CURLOPT_URL,"http://dev.cheshmak.net");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data1=curl_exec($ch) or die(curl_error());
echo $data1;
echo curl_error($ch);
curl_close($ch);
?>

4- لاگین کردن به سایت YAHOO.com :

<?php
// Script created by Nur-E-Alam Khan
// Email: porosh@msn.com (Dhaka, Bangladesh)

$url ="http://login.yahoo.com/config/login?.src=ym&amp;.intl=us&amp;.partner=&amp;.done=http%3A%2F%2Fmail.yahoo.com%2F";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt ($ch, CURLOPT_COOKIEJAR, '/temp/cookie.txt');
curl_setopt ($ch, CURLOPT_POSTFIELDS, "login=emailid&amp;passwd=password&amp;&amp;submit=Sign In");
ob_start();
curl_exec ($ch);
ob_end_clean();
curl_close ($ch);
unset($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_COOKIEFILE, "/temp/cookie.txt");
curl_setopt($ch, CURLOPT_URL,"http://us.f515.mail.yahoo.com/ym/login?");
$result = curl_exec ($ch);

curl_close ($ch);
echo $result;
?>

منابع
PHP Manual
weberdev.com

مطالب مرتبط:
  1. آموزش Crontab
  2. معرفی نقشه ذهنی و آموزش نرم افزار FreeMind
  3. از سیر تا پیاز HTML در کتاب الکترونیکی آموزش html

سعید زبردست

facebook twitter linkedin Email

من برنامه نویس Java و PHP هستم. در کنار برنامه نویسی اطلاعات خوبی در زمینه پایگاه ‌های داده بخصوص MySQL دارم. برای اطلاع بیشتر به صفحه درباره سعید زبردست مراجعه کنید.


نظرات