У PHP я бачу слово cURL у багатьох проектах PHP. Що це? Як це працює?
Посилання: cURL
У PHP я бачу слово cURL у багатьох проектах PHP. Що це? Як це працює?
Посилання: cURL
Відповіді:
cURL - це бібліотека, яка дозволяє робити запити HTTP в PHP. Все, що потрібно знати про це (та більшість інших розширень), можна знайти в посібнику PHP .
Для використання функцій cURL PHP потрібно встановити пакет »libcurl. PHP вимагає використання libcurl 7.0.2-beta або вище. У PHP 4.2.3 вам знадобиться libcurl версії 7.9.0 або новішої. З PHP 4.3.0 вам знадобиться версія libcurl, що становить 7.9.8 або вище. Для PHP 5.0.0 потрібна версія libcurl версії 7.10.5 або новішої.
Ви також можете робити HTTP-запити без CURL, хоча це потрібно allow_url_fopen
ввімкнути у вашому php.ini
файлі.
// Make a HTTP GET request and print it (requires allow_url_fopen to be enabled)
print file_get_contents('http://www.example.com/');
cURL - це спосіб потрапити на URL з коду, щоб отримати відповідь у форматі HTML. cURL означає клієнтську URL-адресу, яка дозволяє вам з'єднуватися з іншими URL-адресами та використовувати їх відповіді у своєму коді.
Підсумок:
curl_exec
Команда в РНР є мостом для використанняcurl
з консолі. curl_exec дозволяє легко та швидко робити запити GET / POST, отримувати відповіді з інших серверів, таких як JSON, та завантажувати файли.
Попередження, небезпека:
curl
це зло і небезпечно при неправильному використанні, оскільки мова йде про отримання даних з Інтернету. Хтось може потрапити між вашим завитком та іншим сервером та ввести відповідь rm -rf /
у вашу відповідь, і тоді чому я перейшов на консоль і ls -l
навіть більше не працює? Тому що ви неправильно занижували небезпечну силу завитка. Не довіряйте чомусь безпечному, навіть якщо ви спілкуєтесь із власними серверами. Ви можете відтягувати шкідливі програми, щоб позбавити дурнів від їх багатства.
Це було зроблено на Ubuntu 12.10
Основний згортання з командного рядка:
el@apollo:/home/el$ curl http://i.imgur.com/4rBHtSm.gif > mycat.gif
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 492k 100 492k 0 0 1077k 0 --:--:-- --:--:-- --:--:-- 1240k
Тоді ви можете відкрити свій gif у firefox:
firefox mycat.gif
Славні коти, що розвиваються Toxoplasma gondii, змушують жінок тримати кішок навколо, а чоловіків - так само, щоб тримати жінок навколо.
Приклад cURL отримати запит на потрапляння на google.com, відлуння до командного рядка:
Це робиться через термінал phpsh:
php> $ch = curl_init();
php> curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');
php> curl_exec($ch);
Який друкує та скидає безлад з конденсованого html та javascript (від google) на консоль.
Приклад cURL помістить текст відповіді у змінну:
Це робиться через термінал phpsh:
php> $ch = curl_init();
php> curl_setopt($ch, CURLOPT_URL, 'http://i.imgur.com/wtQ6yZR.gif');
php> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
php> $contents = curl_exec($ch);
php> echo $contents;
Змінна тепер містить двійкове, яке є анімований gif кота, можливості нескінченні.
Зробіть скручування з файлу PHP:
Помістіть цей код у файл під назвою myphp.php:
<?php
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL,'http://www.google.com');
curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
$buffer = curl_exec($curl_handle);
curl_close($curl_handle);
if (empty($buffer)){
print "Nothing returned from url.<p>";
}
else{
print $buffer;
}
?>
Потім запустіть його за допомогою командного рядка:
php < myphp.php
Ви запустили myphp.php і виконали ці команди через інтерпретатор php і скинули на екран багато брудних html та javascript.
Ви можете робити GET
і POST
запити за допомогою curl. Все, що вам потрібно зробити, це вказати параметри, визначені тут: Використання curl для автоматизації HTTP-завдань
Нагадування про небезпеку:
Будьте уважні, демпінговий вихід з завитками, якщо будь-який з них буде інтерпретований та виконаний, ваша коробка належить, а інформація про вашу кредитну карту буде продана третім сторонам, і ви отримаєте загадкове стягнення в розмірі 900 доларів від компанії, що займається паркетною підлогою в Алабамі, фронт для кільця злочину шахрайства з обманом на кредитних картках
cURL - це спосіб потрапити на URL з коду, щоб отримати від нього HTML-відповідь. Він використовується для командного рядка cURL з мови PHP.
<?php
// Step 1
$cSession = curl_init();
// Step 2
curl_setopt($cSession,CURLOPT_URL,"http://www.google.com/search?q=curl");
curl_setopt($cSession,CURLOPT_RETURNTRANSFER,true);
curl_setopt($cSession,CURLOPT_HEADER, false);
// Step 3
$result=curl_exec($cSession);
// Step 4
curl_close($cSession);
// Step 5
echo $result;
?>
Крок 1: Ініціалізуйте сеанс згортання за допомогою curl_init()
.
Крок 2: Установіть параметр для CURLOPT_URL
. Це значення - це URL-адреса, до якої ми надсилаємо запит. Додайте пошуковий термін curl
за допомогою параметра q=
. Встановити варіант для CURLOPT_RETURNTRANSFER
. Правда скаже curl повернути рядок, а не роздрукувати її. Встановити параметр для CURLOPT_HEADER
, false підкаже curl ігнорувати заголовок у зворотному значенні.
Крок 3: Виконайте сеанс curl за допомогою curl_exec()
.
Крок 4: Закрийте створений нами сеанс завивки.
Крок 5: Виведіть зворотний рядок.
public function curlCall($apiurl, $auth, $rflag)
{
$ch = curl_init($apiurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if($auth == 'auth') {
curl_setopt($ch, CURLOPT_USERPWD, "passw:passw");
} else {
curl_setopt($ch, CURLOPT_USERPWD, "ss:ss1");
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$dt = curl_exec($ch);
curl_close($ch);
if($rflag != 1) {
$dt = json_decode($dt,true);
}
return $dt;
}
Це також використовується для аутентифікації. Ми також можемо встановити ім'я користувача та пароль для аутентифікації.
Для отримання додаткових функцій див. Посібник користувача або наступний підручник:
http://php.net/manual/en/ref.curl.php
http://www.startutorial.com/articles/view/php-curl
Спочатку давайте розберемося з поняттям curl, libcurl та PHP / cURL.
curl : інструмент командного рядка для отримання або надсилання файлів за допомогою синтаксису URL.
libcurl : бібліотека, створена Даніелем Стенбергом, яка дозволяє підключати та спілкуватися з багатьма різними типами серверів з багатьма різними типами протоколів. На даний момент libcurl підтримує протоколи http, https, ftp, gopher, telnet, dict, file та ldap. libcurl також підтримує сертифікати HTTPS, HTTP POST, HTTP PUT, завантаження FTP (це також можна зробити за допомогою ftp-розширення PHP), завантаження на основі форми HTTP, проксі-сервери, файли cookie та автентифікацію користувача + паролем.
PHP / cURL : Модуль для PHP, що дозволяє програмам PHP використовувати libcurl.
Як ним користуватися:
step1 : Ініціалізуйте сеанс curl за допомогою curl_init ().
крок 2 : встановіть параметр для CURLOPT_URL. Це значення - це URL-адреса, на яку ми надсилаємо запит. Додайте пошуковий термін "curl" за допомогою параметра "q =". Встановіть параметр CURLOPT_RETURNTRANSFER, true скаже curl повернути рядок, а не роздрукувати її. Встановіть опцію для CURLOPT_HEADER, помилка підкаже curl ігнорувати заголовок у зворотному значенні.
stepp3 : Виконати сеанс curl за допомогою curl_exec ().
крок 4 : Закрийте створений нами сеанс завивки.
step5 : Вивести зворотний рядок.
Зробіть DEMO :
Вам потрібно буде створити два файли PHP і помістити їх у папку, з якої ваш веб-сервер може обслуговувати файли PHP. У моєму випадку я ставлю їх у / var / www / для простоти.
1. helloservice.php і 2. demo.php
helloservice.php дуже простий і по суті просто повторює всі отримані дані:
<?php
// Here is the data we will be sending to the service
$some_data = array(
'message' => 'Hello World',
'name' => 'Anand'
);
$curl = curl_init();
// You can also set the URL you want to communicate with by doing this:
// $curl = curl_init('http://localhost/echoservice');
// We POST the data
curl_setopt($curl, CURLOPT_POST, 1);
// Set the url path we want to call
curl_setopt($curl, CURLOPT_URL, 'http://localhost/demo.php');
// Make it so the data coming back is put into a string
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// Insert the data
curl_setopt($curl, CURLOPT_POSTFIELDS, $some_data);
// You can also bunch the above commands into an array if you choose using: curl_setopt_array
// Send the request
$result = curl_exec($curl);
// Get some cURL session information back
$info = curl_getinfo($curl);
echo 'content type: ' . $info['content_type'] . '<br />';
echo 'http code: ' . $info['http_code'] . '<br />';
// Free up the resources $curl is using
curl_close($curl);
echo $result;
?>
2.demo.php , ви можете побачити результат:
<?php
print_r($_POST);
//content type: text/html; charset=UTF-8
//http code: 200
//Array ( [message] => Hello World [name] => Anand )
?>
Розширення CURL до PHP розроблено так, щоб ви могли використовувати різноманітні веб-ресурси з вашого сценарію PHP.
cURL в PHP - це міст для використання командного рядка cURL з мови PHP
PHP підтримує libcurl, бібліотеку, створену Даніелем Стенбергом, яка дозволяє підключати та спілкуватися з багатьма різними типами серверів з багатьма різними типами протоколів. На даний момент libcurl підтримує протоколи http, https, ftp, gopher, telnet, dict, file та ldap. libcurl також підтримує сертифікати HTTPS, HTTP POST, HTTP PUT, завантаження FTP (це також можна зробити за допомогою ftp розширення PHP), завантаження на основі HTTP форми, проксі, cookie та автентифікацію пароля + користувача.
Після компіляції PHP з підтримкою cURL ви можете приступити до використання функцій cURL. Основна ідея функцій cURL полягає в тому, що ви ініціалізуєте сеанс cURL за допомогою curl_init (), потім ви можете встановити всі свої варіанти передачі за допомогою curl_setopt (), потім ви можете виконати сеанс за допомогою curl_exec (), а потім ви закінчіть сеанс, використовуючи curl_close ().
// error reporting
error_reporting(E_ALL);
ini_set("display_errors", 1);
//setting url
$url = 'http://example.com/api';
//data
$data = array("message" => "Hello World!!!");
try {
$ch = curl_init($url);
$data_string = json_encode($data);
if (FALSE === $ch)
throw new Exception('failed to initialize');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)));
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$output = curl_exec($ch);
if (FALSE === $output)
throw new Exception(curl_error($ch), curl_errno($ch));
// ...process $output now
} catch(Exception $e) {
trigger_error(sprintf(
'Curl failed with error #%d: %s',
$e->getCode(), $e->getMessage()),
E_USER_ERROR);
}
Curl - це не що інше, як розширення PHP, яке успадковує поведінку звичайних команд і бібліотеки curl, написаних головним чином для інструменту командного рядка Linux / Unix
Що таке Curl? CURL стенд для клієнтської URL-адреси. CURL використовується для надсилання даних на будь-яку URL-адресу. Більш детально про те, що саме завиток, ви можете відвідати веб-сайт CURL
CURL в PHP Тепер те саме поняття введено в PHP, щоб надсилати дані до будь-якої доступної URL-адреси через інший протокол, наприклад, HTTP або FTP. Для отримання більш детальної інформації ви можете ознайомитись з Підручником з Curl PHP
Функція завивки Php (POST, GET, DELETE, PUT)
function curl($post = array(), $url, $token = '', $method = "POST", $json = false, $ssl = true){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
if($method == 'POST'){
curl_setopt($ch, CURLOPT_POST, 1);
}
if($json == true){
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json','Authorization: Bearer '.$token,'Content-Length: ' . strlen($post)));
}else{
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSLVERSION, 6);
if($ssl == false){
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
// curl_setopt($ch, CURLOPT_HEADER, 0);
$r = curl_exec($ch);
if (curl_error($ch)) {
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$err = curl_error($ch);
print_r('Error: ' . $err . ' Status: ' . $statusCode);
// Add error
$this->error = $err;
}
curl_close($ch);
return $r;
}
Клас завивки Php (GET, POST, FILES UPLOAD, SESSIONS, SEND POST JSON, FORCE SELFSIGNED SSL / TLS):
<?php
// Php curl class
class Curl {
public $error;
function __construct() {}
function Get($url = "http://hostname.x/api.php?q=jabadoo&txt=gin", $forceSsl = false,$cookie = "", $session = true){
// $url = $url . "?". http_build_query($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($session){
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch , CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch , CURLOPT_COOKIEFILE, 'cookies.txt');
}
if($forceSsl){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 1, 2
}
if(!empty($cookie)){
curl_setopt($ch, CURLOPT_COOKIE, $cookie); // "token=12345"
}
$info = curl_getinfo($ch);
$res = curl_exec($ch);
if (curl_error($ch)) {
$this->error = curl_error($ch);
throw new Exception($this->error);
}else{
curl_close($ch);
return $res;
}
}
function GetArray($url = "http://hostname.x/api.php", $data = array("name" => "Max", "age" => "36"), $forceSsl = false, $cookie = "", $session = true){
$url = $url . "?". http_build_query($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($session){
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch , CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch , CURLOPT_COOKIEFILE, 'cookies.txt');
}
if($forceSsl){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 1, 2
}
if(!empty($cookie)){
curl_setopt($ch, CURLOPT_COOKIE, $cookie); // "token=12345"
}
$info = curl_getinfo($ch);
$res = curl_exec($ch);
if (curl_error($ch)) {
$this->error = curl_error($ch);
throw new Exception($this->error);
}else{
curl_close($ch);
return $res;
}
}
function PostJson($url = "http://hostname.x/api.php", $data = array("name" => "Max", "age" => "36"), $forceSsl = false, $cookie = "", $session = true){
$data = json_encode($data);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($session){
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch , CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch , CURLOPT_COOKIEFILE, 'cookies.txt');
}
if($forceSsl){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 1, 2
}
if(!empty($cookie)){
curl_setopt($ch, CURLOPT_COOKIE, $cookie); // "token=12345"
}
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer helo29dasd8asd6asnav7ffa',
'Content-Type: application/json',
'Content-Length: ' . strlen($data))
);
$res = curl_exec($ch);
if (curl_error($ch)) {
$this->error = curl_error($ch);
throw new Exception($this->error);
}else{
curl_close($ch);
return $res;
}
}
function Post($url = "http://hostname.x/api.php", $data = array("name" => "Max", "age" => "36"), $files = array('ads/ads0.jpg', 'ads/ads1.jpg'), $forceSsl = false, $cookie = "", $session = true){
foreach ($files as $k => $v) {
$f = realpath($v);
if(file_exists($f)){
$fc = new CurlFile($f, mime_content_type($f), basename($f));
$data["file[".$k."]"] = $fc;
}
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); // !!!! required as of PHP 5.6.0 for files !!!
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)");
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($session){
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch , CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch , CURLOPT_COOKIEFILE, 'cookies.txt');
}
if($forceSsl){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 1, 2
}
if(!empty($cookie)){
curl_setopt($ch, CURLOPT_COOKIE, $cookie); // "token=12345"
}
$res = curl_exec($ch);
if (curl_error($ch)) {
$this->error = curl_error($ch);
throw new Exception($this->error);
}else{
curl_close($ch);
return $res;
}
}
}
?>
Приклад:
<?php
$urlget = "http://hostname.x/api.php?id=123&user=bax";
$url = "http://hostname.x/api.php";
$data = array("name" => "Max", "age" => "36");
$files = array('ads/ads0.jpg', 'ads/ads1.jpg');
$curl = new Curl();
echo $curl->Get($urlget, true, "token=12345");
echo $curl->GetArray($url, $data, true);
echo $curl->Post($url, $data, $files, true);
echo $curl->PostJson($url, $data, true);
?>
Файл PHP: api.php
<?php
/*
$Cookie = session_get_cookie_params();
print_r($Cookie);
*/
session_set_cookie_params(9000, '/', 'hostname.x', isset($_SERVER["HTTPS"]), true);
session_start();
$_SESSION['cnt']++;
echo "Session count: " . $_SESSION['cnt']. "\r\n";
echo $json = file_get_contents('php://input');
$arr = json_decode($json, true);
echo "<pre>";
if(!empty($json)){ print_r($arr); }
if(!empty($_GET)){ print_r($_GET); }
if(!empty($_POST)){ print_r($_POST); }
if(!empty($_FILES)){ print_r($_FILES); }
// request headers
print_r(getallheaders());
print_r(apache_response_headers());
// Fetch a list of headers to be sent.
// print_r(headers_list());
?>