Php curl пример: Примеры использования cURL в PHP
Полезные примеры использования cURL с PHP
cURL и его расширение для PHP Libcurl, очень полезный инструмент для таких задач, как моделирование веб-браузера, отправка формы или авторизация в веб-сервисах. В этой статье я покажу вам некоторые полезные вещи, которые вы можете делать с помощью PHP и cURL.
Проверяем доступность нужного нам веб-сайта
Хотите знать, доступен ли нужный вам веб-сайт? cURL может вам помочь в этом. Этот скрипт можно использовать для мониторинга своих веб-сайтов.
Не забудьте изменить URL веб-сайта на тот который вы хотите проверить, в строке 3. После этого, просто выполните этот скрипт и это позволит вам узнать о доступности сайта.
<?php
if (isDomainAvailible(‘http://www.webmasters.by’))
{
echo «Сайт доступен!»;
}
else
{
echo «Упс, что то не открывается.»;
}
//возвращает true, если домен доступен, в противном случае false
function isDomainAvailible($domain)
{
//проверяем валидный ли url
if(!filter_var($domain, FILTER_VALIDATE_URL))
{
return false;
}
//инициализация curl
$curlInit = curl_init($domain);
curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curlInit,CURLOPT_HEADER,true);
curl_setopt($curlInit,CURLOPT_NOBODY,true);
curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);
//получаем ответ
$response = curl_exec($curlInit);
curl_close($curlInit);
if ($response) return true;
return false;
}
?>
Замена cURL для file_get_contents ()
Функция file_get_contents() очень полезна, но она, к сожалению, отключена по умолчанию на некоторых хостингах. Используя cURL, мы можем написать аналогичную функцию, которая работает точно так же, как и file_get_contents().
function file_get_contents_curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //чтобы cURL возвращал данные, а не выводил в браузер.
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
Получаем последний статус в Твиттере
Используя PHP с cURL можно довольно легко получить статус конкретного пользователя в Твиттере. Данную информацию можно выводить, например, в своем блоге.
function get_status($twitter_id, $hyperlinks = true) {
$c = curl_init();
curl_setopt($c, CURLOPT_URL, «http://twitter.com/statuses/user_timeline/$twitter_id.xml?count=1»);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$src = curl_exec($c);
curl_close($c);
preg_match(‘/<text>(.*)<\/text>/’, $src, $m);
$status = htmlentities($m[1]);
if( $hyperlinks ) $status = ereg_replace(«[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]», ‘<a href=»%5C%22%5C%5C0%5C%22″>\\0</a>’, $status);
return($status);
}
Эта функция очень проста в использовании:
echo get_status(‘twitter_id’);
Twitter: испытание дружбы между двумя пользователями
Если вы хотите знать, читает ли конкретный пользователь ваши твиты, то вы можете использовать Twitter API. Этот скрипт будет выводить true, если два пользователя, указанные в строках 18 и 19, подписанны на твиты друг друга. В противном случае вернет false.
function make_request($url) {
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
/* получаем соответствие */
function get_match($regex,$content) {
preg_match($regex,$content,$matches);
return $matches[1];
}
/* персоны для теста */
$person1 = ‘phpsnippets’;
$person2 = ‘catswhocode’;
/* посылаем запрос в twitter */
$url = ‘https://api.twitter.com/1/friendships/exist’;
$format = ‘xml’;
/* проверяем */
$persons12 = make_request($url.’.’.$format.’?user_a=’.$person1.’&user_b=’.$person2);
$result = get_match(‘/<friends>(.*)<\/friends>/isU’,$persons12);
echo $result; // returns «true» or «false»
Загрузка и сохранение изображений со страницы, используя cURL
Эти функции могут быть очень полезны: передайте скрипту URL веб-страницы, и он сохранит все изображения с этой страницы на сервер.
function getImages($html) {
$matches = array();
$regex = ‘~http://somedomain.com/images/(.*?)\.jpg~i’;
preg_match_all($regex, $html, $matches);
foreach ($matches[1] as $img) {
saveImg($img);
}
}
function saveImg($name) {
$url = ‘http://somedomain.com/images/’.$name.’.jpg’;
$data = get_data($url);
file_put_contents(‘photos/’.$name.’.jpg’, $data);
}
$i = 1;
$l = 101;
while ($i < $l) {
$html = get_data(‘http://somedomain.com/id/’.$i.’/’);
getImages($html);
$i += 1;
}
Конвертация валют с помощью cURL и Google
Конвертирование валют не очень трудно сделать, но так как курс валют колеблется все время, нам, безусловно, нужно использовать такой сервис как у Google, чтобы получить самые последние данные. Функция currency() принимает 3 параметра: первая валюта, вторая валюта и сумма.
function currency($from_Currency,$to_Currency,$amount) {
$amount = urlencode($amount);
$from_Currency = urlencode($from_Currency);
$to_Currency = urlencode($to_Currency);
$url = «http://www. google.com/ig/calculator?hl=en&q=$amount$from_Currency=?$to_Currency»;
$ch = curl_init();
$timeout = 0;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT , «Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)»);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$rawdata = curl_exec($ch);
curl_close($ch);
$data = explode(‘»‘, $rawdata);
$data = explode(‘ ‘, $data[‘3’]);
$var = $data[‘0’];
return round($var,2);
}
Получаем размер удаленного файла при помощи cURL
Хотите иметь возможность посчитать размер конкретного файла, расположенного на другом сервере? Эта функция может вам помочь. Она принимает 3 параметра: URL файла, и, в случае если файл защищен паролем, имя пользователя и пароль.
function remote_filesize($url, $user = «», $pw = «»){
ob_start();
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
if(!empty($user) && !empty($pw))
{
$headers = array(‘Authorization: Basic ‘ . base64_encode(«$user:$pw»));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
$ok = curl_exec($ch);
curl_close($ch);
$head = ob_get_contents();
ob_end_clean();
$regex = ‘/Content-Length:\s([0-9].+?)\s/’;
$count = preg_match($regex, $head, $matches);
return isset($matches[1]) ? $matches[1] : «unknown»;
}
Загрузка через FTP при помощи cURL
PHP имеет FTP библиотеку, но вы также можете использовать cURL для загрузки файлов на FTP-сервер. Вот рабочий пример:
// открываем файл
$file = fopen(«/path/to/file», «r»);
// url содержит почти всю необходимую информацию
$url = «ftp://username:<span>Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.</span><script type=’text/javascript’>
document.getElementById(‘cloaka59fe7e89fd8b7e9a07eb0986943d804’).innerHTML = »;
var prefix = ‘ma’ + ‘il’ + ‘to’;
var path = ‘hr’ + ‘ef’ + ‘=’;
var addya59fe7e89fd8b7e9a07eb0986943d804 = ‘password’ + ‘@’;
addya59fe7e89fd8b7e9a07eb0986943d804 = addya59fe7e89fd8b7e9a07eb0986943d804 + ‘mydomain’ + ‘.’ + ‘com’;
var addy_texta59fe7e89fd8b7e9a07eb0986943d804 = ‘password’ + ‘@’ + ‘mydomain’ + ‘.’ + ‘com’;document. getElementById(‘cloaka59fe7e89fd8b7e9a07eb0986943d804’).innerHTML += ‘<a ‘ + path + ‘\» + prefix + ‘:’ + addya59fe7e89fd8b7e9a07eb0986943d804 + ‘\’>’+addy_texta59fe7e89fd8b7e9a07eb0986943d804+'<\/a>’;
</script>:21/path/to/new/file»;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// устанавливаем опции
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize(«/path/to/file»));
// Устанавливаем режим ASCII (т.е. файл текстовый)
curl_setopt($ch, CURLOPT_FTPASCII, 1);
$output = curl_exec($ch);
curl_close($ch);
Я надеюсь эти примеры будут полезны вам.
Перевод статьи с catswhocode.com
Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим форумом
cURL тестирование HTTP заголовков [АйТи бубен]
cURL это инструмент, позволяющий взаимодействовать с различными серверами и поддерживающий множество протоколов: HTTP, FTP, TELNET и др. Изначально cURL — это служебная программа для командной строки. PHP поддерживает работу с библиотекой cURL.
cURL позволяет легко выполнять любые HTTP методы для нужного ресурса. Можно передавать любые параметры запросов и заголовков, а так же проверять ответные заголовки и данные. Инструмент коммандной строки «curl», стандартен для большинства *nix систем. Для пользователей Windows подойдёт MinGW/MSYS.
Пример использования и базовые опции:
# curl -X PUT www.example.com/bar/1 -d "some=var" -d "other=var2" -H "Accept: text/json" -I
-X [METHOD] определяет HTTP метод. -d «name=value» устанавливает имя и значения переменных в POST/PUT. -H [HEADER] устанавливает заголовок. -I отображает заголовки ответа.
Пример авторизация Метод HTTP POST на PHP с использованием curl:
Источник: htmlweb.ru
<? function login($url,$login,$pass){ $ch = curl_init(); if(strtolower((substr($url,0,5))=='https')) { // если соединяемся с https curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); } curl_setopt($ch, CURLOPT_URL, $url); // откуда пришли на эту страницу curl_setopt($ch, CURLOPT_REFERER, $url); // cURL будет выводить подробные сообщения о всех производимых действиях curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,"login=". $login."&pass=".$pass); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4"); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //сохранять полученные COOKIE в файл curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); $result=curl_exec($ch); // Убеждаемся что произошло перенаправление после авторизации if(strpos($result,"Location: home.php")===false) die('Login incorrect'); curl_close($ch); return $result; } // чтение страницы после авторизации function Read($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // откуда пришли на эту страницу curl_setopt($ch, CURLOPT_REFERER, $url); //запрещаем делать запрос с помощью POST и соответственно разрешаем с помощью GET curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //отсылаем серверу COOKIE полученные от него при авторизации curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT']. '/cookie.txt'); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4"); $result = curl_exec($ch); curl_close($ch); return $result; } ?>
Функция вывод размер удаленного файла, используется библиотека PHP curl и HTTP метод запроса HEAD (параметр CURLOPT_NOBODY).
function getRemoteFilesize($url){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, TRUE); curl_setopt($ch, CURLOPT_NOBODY, TRUE); $data = curl_exec($ch); $size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); curl_close($ch); return $size; } $url = 'https://example.com/file.csv'; echo getRemoteFilesize($url); echo "\n";
Константа | Описание |
---|---|
CURLE_ABORTED_BY_CALLBACK | Функция callback прервала операцию |
CURLE_BAD_CALLING_ORDER | Неверный порядок вызова функций |
CURLE_BAD_FUNCTION_ARGUMENT | Неверный параметр функции |
CURLE_BAD_PASSWORD_ENTERED | Введен неправильный пароль |
CURLE_COULDNT_CONNECT | Невозможно подключиться к узлу |
CURLE_COULDNT_RESOLVE_HOST | Невозможно обнаружить узел |
CURLE_COULDNT_RESOLVE_PROXY | Невозможно обнаружить прокси-сервер |
CURLE_FAILED_INIT | Ошибка инициализации |
CURLE_FILE_COULDNT_READ_FILE | Нельзя прочитать файл |
CURLE_FTP_ACCESS_DENIED | Во время FTP-операции доступ невозможен |
CURLE_FTP_BAD_DOWNLOAD_RESUME | Неудачное продолжение FTP-загрузки |
CURLE_FTP_CANT_GET_HOST | Невозможно обнаружить FTP-узел |
CURLE_FTP_CANT_RECONNECT | Невозможно повторно подключиться к FTP-серверу |
CURLE_FTP_COULDNT_GET_SIZE | Ошибка FTP-команды SIZE |
CURLE_FTP_COULDNT_RETR_FILE | Невозможно найти файл по FTP-соединению |
CURLE_FTP_COULDNT_SET_ASCII | Невозможно установить режим ASCII |
CURLE_FTP_COULDNT_SET_BINARY | Невозможно установить режим BINARY |
CURLE_FTP_COULDNT_STOR_FILE | Ошибка FTP-команды STOR |
CURLE_FTP_COULDNT_USE_REST | Ошибка FTP-команды REST |
CURLE_FTP_PORT_FAILED | Ошибка FTP-команды PORT |
CURLE_FTP_QUOTE_ERROR | Ошибка FTP-команды QUOTE |
CURLE_FTP_USER_PASSWORD_INCORRECT | Неправильная пара пользователь-пароль для FTP-соединения |
CURLE_FTP_WEIRD_227_FORMAT | Нераспознанный ответ на FTP-команду 227 |
CURLE_FTP_WEIRD_PASS_REPLY | Нераспознанный ответ на FTP-команду PASS |
CURLE_FTP_WEIRD_PASV_REPLY | Нераспознанный ответ на FTP-команду PASV |
CURLE_FTP_WEIRD_SERVER_REPLY | Нераспознанный ответ FTPrcepeepa |
CURLE_FTP_WEIRD_USER_REPLY | Нераспознанный ответ USER FTP-протокола |
CURLE_FTP_WRITE_ERROR | FTP-сервер сообщает о проблемах при выполнении операций записи |
CURLE_FUNCTION_NOT_FOUND | Функция LDAP не найдена |
CURLE_HTTP_NOT_FOUND | HTTP-страница не найдена |
CURLE_HTTP_POST_ERROR | Ошибка HTTP-команды post |
CURLE_HTTP_RANGE_ERROR | Ошибка диапазона HTTP |
CURLE_LDAP_CANNOT_BIND | Ошибка связи библиотеки LDAP |
CURLE_LDAP_SEARCH_FAILED | Ошибка поиска библиотеки LDAP |
CURLE_LIBRARY_NOT_FOUND | Библиотека LDAP не найдена |
CURLE_MALFORMAT_USER | Неправильно задано имя пользователя |
CURLE_OK | Ошибок нет |
CURLE_OPERATION_TIMEOUTED | Тайм-аут операции |
CURLE_OUT_OF_MEMORY | Не хватает памяти |
CURLE_PARTIAL_FILE | Была передана только часть файла |
CURLE_READ_ERROR | Ошибка чтения на локальном устройстве |
CURLE_SSL_CONNECT_ERROR | Ошибка SSL-соединения |
CURLE_SSL_PEER_CERTIFICATE | Непроверенный сертификат SSL |
CURLE_TOO_MANY_REDIRECTS | Слишком много переадресаций |
CURLE_UNKNOWN_TELNET_OPTION | Задан неизвестный параметр утилиты TELNET |
CURLE_UNSUPPORTED_PROTOCOL | Протокол не поддерживается |
CURLE_UNSUPPORTED_PROTOCOL | Протокол не поддерживается |
CURLE_URL_MALFORMAT | Ошибочный URL |
CURLE_URL_MALFORMAT_USER | Ошибочный URL пользователя |
CURLE_WRITE_ERROR | Ошибка записи на локальном устройстве |
Константа | Описание |
CURLOPT_BINARYTRANSFER | Используется с параметром, CURLOPT_RETURNTRANSFER. Это гарантирует возвращение двоичного значения |
CURLOPT_CAINFO | Указывает путь к файлу, содержащему один и более сертификатов, необходимых для проверки другого узла. Этот параметр действует только вместе с параметром CURLOPT_SSL_VERIFYPEER |
CURLOPT_CAPATH | Указывает путь к файлу, содержащему один или более сертификатов, необходимых для проверки другого узла. Этот параметр действует только вместе с параметром CURLOPT_SSL_VERIFYPEER |
CURLOPT_CLOSEPOLICY | Используется для установки политики закрытия соединения при его заполнении. Может иметь значение CURLCLOSEPOLICY_LEAST_RECENTLY_USED или CURLCLOSEPOLICY_OLDEST |
CURLOPT_CONNECTTIMEOUT | Задает максимальное время ожидания соединения в секундах |
CURLOPT_COOKIE | Используется для задания файлов cookie в запросе. Он задается в виде строки со знаком равенства между именем файла cookie и значением value. Имена файлов cookie разделяются точкой с запятой. Например, cookiel=valueA; cookiel=valueB задает два файла cookie: cookiel и cookie2 |
CURLOPT_COOKIEFILE | Путь, по которому размещаются файлы cookie по запросам. Этот файл может соответствовать формату Netscape Navigator или обычному формату HTTP-заголовка |
CURLOPT_COOKIEJAR | Задает путь к файлу, в котором сохраняются файлы cookie. Curl сохраняет любые файлы cookie, которые он получает во время запроса к этому файлу. Затем этот файл можно указывать в параметре CURLOPT_COOKIEFILE |
CURLOPT_CRLF | При значении TRUE Curl преобразует символы новой строки, характерные для ОС Unix, в пары символов «возврат каретки перевод строки» |
CURLOPT_CUSTOMREQUEST | Используется для отсылки альтернативной команды при HTTP-запросе. В нем указывается только команда, а не вся строка запроса |
CURLOPT_DNS_CACHE_TIMEOUT | Параметр работы с кэшем поиска имен узлов. В нем задается время хранения имени в кэше (в секундах) |
CURLOPT_DNS_USE_GLOBAL_CACHE | При значении TRUE Curl разделяет кэш поиска имен узлов. Этот параметр не является защищенным с точки зрения потоков |
CURLOPT_EGDSOCKET | Задает путь к сокету Entropy Gathering Daemon. Curl использует его в качестве генератора случайных чисел, который используется для SSL |
CURLOPT_FAILONERROR | При значении TRUE коды HTTP-ответов больше 300 не приводят к возвращению страниц, обычно возвращаемых сервером |
CURLOPT_FILE | Предназначен для вывода сообщений в файл, а не в браузер |
CURLOPT_FILETIME | При значении TRUE Curl делает попытку получить время модификации запрошенного файла |
CURLOPT_FOLLOWLOCATION | При значении TRUE Curl просматривает заголовки переадресации, возвращаемые HTTP-серверами. Установите в TRUE, что бы Curl следовал редиректам. |
CURLOPT_FORBID_REUSE | При значении TRUE Curl закрывает соединение после завершения обработки запроса |
CURLOPT_FRESH_CONNECT | При значении TRUE Curl независимо от наличия соответствующего соединения в кэше создает новое соединение |
CURLOPT_FTPAPPEND | При значении TRUE Curl при операции FTP выгрузки, вместо перезаписи выполняет добавление |
CURLOPT_FTPLISTONLY | При значении TRUE Curl возвращает перечень файлов, хранящихся в FTP-каталоге |
CURLOPT_FTPPORT | Задает настройки FTP-команды PORT, при этом запрашивается соединение с сервером. В этом параметре указываются IP-адрес, имя узла, имя сетевого интерфейса. Для использования адреса, используемого по умолчанию, указывается — |
CURLOPT_FTP_USE_EPSV | По умолчанию, при FTP-передачах в пассивном режиме, Curl использует команду EPSV. Для того чтобы запретить использование этой команды, данный параметр должен иметь значение FALSE |
CURLOPT_HEADER | При значении TRUE Curl включает в вывод заголовки |
CURLOPT_HEADERFUNCTION | Задает имя функции, которую вызывает Curl для каждого вызванного HTTP-заголовка. Эта функция должна принимать два аргумента: ресурс Curl и строку, содержащую полный заголовок |
CURLOPT_HTTPGET | При значении TRUE Curl в HTTP-передачах использует метод GET. Это может понадобиться только при повторном использовании ресурса Curl |
CURLOPT_HTTPHEADER | Позволяет отправить HTTP-заголовки, прописанные вручную. Заголовки должны быть помещены в массив |
CURLOPT_HTTPPROXYTUNNEL | При значении TRUE Curl передает все запросы, пользуясь туннелем на прокси-сервере |
CURLOPT_HTTP_VERSION | Используется для того, чтобы вынудить Curl использовать соответствующую версию протокола HTTP. Значение CURL_HTTP_VERSION_NONE задается, если право выбора предоставляется Curl. Для того чтобы использовалась версия HTTP/1.0, необходимо задать значение CURL_HTTP_VERSION_1_0. Для того чтобы использовалась версия HTTP/1.1, необходимо задать значение CURL_HTTP_VERSION_l_l |
CURLOPT_INFILE | Если в этом параметре указан открытый файловый поток, то Curl будет считывать туда ввод из файла |
CURLOPT_INFILESIZE | Используется для определения размера выгружаемого файла |
CURLOPT_INTERFACE | Задает имя используемого интерфейса. Можно задавать имя интерфейса, имя узла или IP-адрес |
CURLOPT_KRB4LEVEL | Для FTP-передач с помощью этого параметра можно указать уровень безопасности Kerberos. Значением этого параметра могут быть такие строки: clear, safe, confidential и private. Установка значения FALSE отключит безопасность Kerberos |
CURLOPT_LOW_SPEED_LIMIT | Используется для снижения ограничения скорости передачи, которая задается в байтах в секунду. Если скорость передачи упадет ниже предела, заданного параметром CURLOPT_LOW_SPEED_TIME, Curl прервет передачу |
CURLOPT_LOW_SPEED_TIME | Предназначен для снижения ограничения скорости передачи и используется с параметром CURLOPT_LOW_SPEED_LIMIT |
CURLOPT_MAXCONNECTS | Задает размер кэша соединения |
CURLOPT_MAXREDIRS | Используется для задания максимального количества переадресаций |
CURLOPT_MUTE | При значении TRUE PHP не генерирует вывод на браузер при выполнении функций Curl |
CURLOPT_NETRC | При значении TRUE Curl при аутентификации пользователей просматривает путь ~/.netrc |
CURLOPT_NOBODY | При значении TRUE Curl исключает из вывода основное тело HTTP-страницы |
CURLOPT_NOPROGRESS | При значении FALSE Curl отображает индикатор работы. По умолчанию этот параметр имеет значение TRUE |
CURLOPT_PASSWDFUNCTION | Используется для указания имени функции обработки запросов паролей. Эта функция должна принимать три аргумента: ресурс Curl, подсказку пароля, отправленную сервером, и ссылку, куда необходимо поместить пароль. Эта функция возвращает нуль в случае успешного завершения работы и значение, отличное от нуля, в случае возникновения ошибки. Для восстановления стандартной функциональности для этого параметра устанавливается значение FALSE |
CURLOPT_PORT | Используется для задания номера порта, применяемого в запросах |
CURLOPT_POST | При значении TRUE Curl делает HTTP-запрос POST с помощью кодировки application/x-www-form-urlencoded |
CURLOPT_POSTFIELDS | Предназначен для передачи всех данных операции post. Поля форматируются строго в соответствии с порядком приема. Например, строка apple=l&ball=red&cat=45.56 будет соответствовать трем полям: apple, ball и cat |
CURLOPT_POSTQUOTE | Передает массив FTP-команд, выполняемых после главного запроса |
CURLOPT_PROXY | Устанавливается на прокси-сервере |
CURLOPT_PROXYUSERPWD | Используется для установки имени пользователя и его пароля, необходимых для прокси-сервера. При этом используется формат username; password |
CURLOPT_PUT | При значении TRUE Curl выполняет HTTP-запрос PUT. При этом необходимо задавать параметры CURLOPT INFILE и CURLOPT INFILESIZE |
CURLOPT_QUOTE | Задает массив FTP-команд, выполняемых до главного запроса |
CURLOPT_RANDOM_FILE | Задает путь к файлу, который будет читать Curl для задания начальных значений генератора случайных величин SSL |
CURLOPT_RANGE | Используется для задания диапазона заголовка, отправленного HTTP-сервером. Передается строка, содержащая смещение начала и конца строки в байтах, разделенные тире. При указании нескольких диапазонов они разделяются запятыми, например 100-150,233-502. О диапазонах можно узнать подробнее в спецификации протокола HTTP 1.1 |
CURLOPT_READFUNCTION | Задает имя функции передачи данных другой стороне соединения. Эта функция должна принимать два аргумента: ресурс Curl и строку ссылки. Копирует данные в строку ссылки и возвращает количество байт. Возвращение нулевого значения свидетельствует о достижении конца файла |
CURLOPT_REFERER | Используется для задания значения поля Ref erer, передаваемого в HTTP-запросах |
CURLOPT_RESUME_FROM | Предназначен для возобновления передачи. Смещение задается в байтах |
CURLOPT_RETURNTRANSFER | Обычно Curl отправляет результаты команд непосредственно в браузер. Для получения результатов в виде возвращаемого значения утилиты curl_exec для этого параметра устанавливается значение TRUE |
CURLOPT_SSLCERT | Задает путь к сертификату SSL в формате РЕМ (Privacy Enhanced Mail) |
CURLOPT_SSLCERTPASSWD | Задает пароль, необходимый для чтения сертификата SSL, заданного параметром CURLOPT_SSLCERT |
CURLOPT_SSLENGINE | Задает имя процессора SSL, который будет использоваться для частных ключей |
CURLOPT_SSLENGINE_DEFAULT | Задает имя процессора SSL, который будет использоваться в большинстве случаев, исключая частные ключи |
CURLOPT_SSLKEY | Задает путь к частному ключу. По умолчанию задается тип РЕМ, который может быть изменен параметром CURLOPT_SSLKEYTYPE |
CURLOPT_SSLKEYPASSWD | Задает пароль, необходимый для использования с частным ключом, заданным параметром CURLOPT_SSLKEY |
CURLOPT_SSLKEYTYPE | Задает тип частного ключа, заданного параметром CURLOPT_SSLKEY. Тип определяется одной из следующих строк: РЕМ, DER или ENG |
CURLOPT_SSLVERSION | Предназначен для активизации второй или третьей версии SSL. Обычно Curl «угадывает» соответствующую версию протокола |
CURLOPT_SSL_CIPHER_LIST | Используется для определения списка шифров, которые будут использоваться при SSL-соединениях. Названия шифров разделяются точкой с запятой. Этот список задается в процессе компиляции OpenSSL |
CURLOPT_SSL_VERIFYHOST | Для этого параметра устанавливается значение 1, если Curl проверяет имя сертификата SSL, или значение 2, для того чтобы было достаточно простого совпадения с именем узла |
CURLOPT_SSL_VERIFYPEER | При значении TRUE Curl делает попытку проверить идентичность соединения с помощью сертификатов, заданных параметром CURLOPT_CAINFO |
CURLOPT_STDERR | Задает открытый файловый поток, куда будут перенаправлены сообщения об ошибках |
CURLOPT_TIMECONDITION | Предназначен для активизации условий передачи на основании анализа времени последней модификации удаленного файла. Для задания временного значения, которое будет использоваться для проверки этого условия, используется параметр CURLOPT_TIMEVALUE. Для соблюдения требования модификации файла с определенного момента времени используется параметр TIMECOND_IFMODSINCE. Для соблюдения требования отсутствия изменений файла с определенного момента времени используется параметр TIMECOND_ISUNMODSINCE |
CURLOPT_TIMEOUT | Задает максимальное время в секундах, на протяжении которого может выполняться Curl-операция |
CURLOPT_TIMEVALUE | Устанавливает время в стандартном формате временной метки Unix, который используется параметром CURLOPT_TIMECONDITION |
CURLOPT_TRANSFERTEXT | При значении TRUE Curl осуществляет FTP-передачи в формате ASCII и в тексте в формате LDAP вместо HTML |
CURLOPT_UPLOAD | При значении TRUE Curl выполняет НТТР-выгрузку. Необходимо установить CURLOPT_INFILE и CURLOPT_INFILESIZE |
CURLOPT_URL | Задает исполняемый URL. Этот параметр можно установить и с помощью утилиты curl_init |
CURLOPT_USERAGENT | Устанавливает значение поля User-agent, переданное в HTTP-запросах |
CURLOPT_USERPWD | Задает имя пользователя и его пароль, необходимый для соединения. При этом используется формат username:password |
CURLOPT_VERBOSE | При значении TRUE Curl выводит сообщение о состоянии |
CURLOPT_WRITEFUNCTION | Задает имя функции, которая будет получать данные при указанном соединении. Эта функция принимает два аргумента: ресурс Curl и строку данных. Она возвращает количество обработанных байтов данных. Если возвращаемое значение не соответствует количеству переданных данных, Curl сообщает об ошибке |
CURLOPT_WRITEHEADER | Задает открытый файловый поток, который будет получать заголовки. Значением option задается ресурс, возвращаемый функцией fopen |
CURLOPT_CAINFO | Имя файла, содержащего один или более сертификатов, с которыми будут сверяться узлы. Этот параметр имеет смысл только при использовании совместно с CURLOPT_SSL_VERIFYPEER . | Может потребоваться абсолютный путь. |
CURLOPT_CAPATH | Директория, содержащая несколько CA сертификатов. Используйте этот параметр совместно с CURLOPT_SSL_VERIFYPEER . | |
CURLOPT_COOKIE | Содержимое заголовка «Cookie: «, используемого в HTTP-запросе. Обратите внимание, что несколько cookies разделяются точкой с запятой с последующим пробелом (например, «fruit=apple; colour=red«) | |
CURLOPT_COOKIEFILE | Имя файла, содержащего cookies. Данный файл должен быть в формате Netscape или просто заголовками HTTP, записанными в файл. Если в качестве имени файла передана пустая строка, то cookies сохраняться не будут, но их обработка все еще будет включена. | |
CURLOPT_COOKIEJAR | Имя файла, в котором будут сохранены все внутренние cookies текущей передачи после закрытия дескриптора, например, после вызова curl_close. | |
CURLOPT_CUSTOMREQUEST | Собственный метод запроса, используемый вместо
| |
CURLOPT_DEFAULT_PROTOCOL | Протокол по умолчанию, если он отсутствует в схеме URL. | Добавлено в cURL 7.45.0. Доступно с PHP 7.0.7. |
CURLOPT_DNS_INTERFACE | Устанавливает имя сетевого интерфейса, к которому привязан DNS. | Добавлено в cURL 7.33.0. Доступно с PHP 7.0.7. |
CURLOPT_DNS_LOCAL_IP4 | Установить локальный IPv4 адрес, по которому доступне DNS. | Добавлено в cURL 7.33.0. Доступно с PHP 7.0.7. |
CURLOPT_DNS_LOCAL_IP6 | Установить локальный IPv6 адрес, по которому доступне DNS. | Добавлено в cURL 7.33.0. Доступно с PHP 7.0.7. |
CURLOPT_EGDSOCKET | Наподобие CURLOPT_RANDOM_FILE , за исключениемтого, что имя файла устанавливается в сокет Entropy Gathering Daemon. | |
CURLOPT_ENCODING | Содержимое заголовка «Accept-Encoding: «. Это позволяет декодировать запрос. Поддерживаемыми кодировками являются «identity», «deflate» и «gzip». Если передана пустая строка, «», посылается заголовок, содержащий все поддерживаемые типы кодировок. | Добавлен в версии cURL 7.10. |
CURLOPT_FTPPORT | Значение, которое будет использоваться для определения IP-адреса для команды «PORT» FTP-протокола. Команда «PORT» сообщает серверу, с каким IP-адресом он должен устанавливать соединение. Это может быть IP-адрес, имя хоста, имя сетевого интерфейса (под Unix), или просто ‘-‘ для использования системного IP-адреса по умолчанию. | |
CURLOPT_INTERFACE | Имя используемого сетевого интерфейса. Может быть именем интерфейса, IP адресом или именем хоста. | |
CURLOPT_KEYPASSWD | Пароль, который требуется для использования приватного ключа CURLOPT_SSLKEY или CURLOPT_SSH_PRIVATE_KEYFILE . | Добавлено в cURL 7.16.1. |
CURLOPT_KRB4LEVEL | Уровень безопасности KRB4 (Kerberos 4). Любое из следующих значений (в порядке от слабого к самому сильному) корректно: «clear», «safe», «confidential», «private».. Если указанная строка отличается от данных значений, будет использовано значение «private». Установка этого параметра в NULL полностью отключитбезопасность KRB4. На данный момент безопасность KRB4 работает только с FTP транзакциями. | |
CURLOPT_LOGIN_OPTIONS | Используется для установки специфичных для протокола настроек логина, таких как предпочитаемый механизм аутентификации «AUTH=NTLM» или «AUTH=*», и должна использоваться совместно с CURLOPT_USERNAME . | Добавлено в cURL 7.34.0. Доступно с PHP 7.0.7. |
CURLOPT_PINNEDPUBLICKEY | Устанавливает Устанавливает зафиксированный публичный ключ. Строка должны содержать имя файла, в котором лежит ваш зафиксированный публичный ключ. Ожидается формат файла «PEM» или «DEX». Строка также может быть числом в формате base64, закодированным sha256 с префиксом «sha256//» и разделенная точкой с запятой «;». | Добавлено в cURL 7.39.0. Доступно с PHP 7.0.7. |
CURLOPT_POSTFIELDS | Все данные, передаваемые в HTTP POST-запросе. Начиная с версии PHP 5.2.0, при передаче файлов с префиксом С версии PHP 5.5.0, префикс @ устарел и | |
CURLOPT_PRIVATE | Любые данные, которые должны ассоциироваться с этим дескриптором cURL. Эти данные могут быть выбраны подзапросом опции CURLINFO_PRIVATE функцииcurl_getinfo(). cURL ничего не делает с этими данными. Если используется множество дескрипторов cURL, эти данные обычно используются как уникальный ключ для определения дескриптора cURL. | Добавлено в cURL 7.10.3. |
CURLOPT_PROXY | HTTP-прокси, через который будут направляться запросы. | |
CURLOPT_PROXY_SERVICE_NAME | Имя сервиса аутентификации прокси. | Добавлено в cURL 7.34.0. Доступно с PHP 7.0.7. |
CURLOPT_PROXYUSERPWD | Логин и пароль, записанные в виде «[username]:[password]», используемые при соединении через прокси. | |
CURLOPT_RANDOM_FILE | Имя файла, используемого для инициализации генератора случайных чисел для SSL. | |
CURLOPT_RANGE | Диапазон данных, которые нужно загрузить, в формате «X-Y», причем либо X, либо Y могут быть опущены. Протокол HTTP также поддерживает передачу нескольких диапазонов, разделенных запятыми, они задаются в формате «X-Y,N-M». | |
CURLOPT_REFERER | Содержимое заголовка «Referer: «, который будет использован в HTTP-запросе. | |
CURLOPT_SERVICE_NAME | Имя сервиса аутентификации. | Добавлено в cURL 7.43.0. доступно с PHP 7.0.7. |
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 | Строка, содержащая 32 шестнадцатеричных цифры. Строка должна являться контрольной суммой по алгоритму MD5 публичного ключа удаленного компьютера и libcurl будет сбрасывать соединение к удаленному хосту до тех пор, пока контрольная сумма не будет соответствовать публичному ключу. Эта опция предназначена только для передачи данных с помощью SCP и SFTP. | Добавлено в cURL 7.17.1. |
CURLOPT_SSH_PUBLIC_KEYFILE | Имя файла для вашего публичного ключа. Если не задано, то libcurl использует по умолчанию файл $HOME/.ssh/id_dsa.pub, если переменная окружения HOME установлена и файл «id_dsa.pub» в текущей директории, если переменная HOME не установлена. | Добавлено в cURL 7.16.1. |
CURLOPT_SSH_PRIVATE_KEYFILE | Имя файла для вашего приватного ключа. Если не задано, то libcurl использует по умолчанию файл $HOME/.ssh/id_dsa, если переменная окружения HOME установлена и файл «id_dsa» в текущей директории, если переменная HOME не установлена. Если файл защищен паролем, установите пароль с помощью CURLOPT_KEYPASSWD . | Добавлено в cURL 7.16.1. |
CURLOPT_SSL_CIPHER_LIST | Список шифров, используемый в SSL-передачах. Например, RC4-SHA и TLSv1 являются корректными списками шифров. | |
CURLOPT_SSLCERT | Имя файла с корректно отформатированным PEM-сертификатом. | |
CURLOPT_SSLCERTPASSWD | Пароль, необходимый для использования сертификатаCURLOPT_SSLCERT . | |
CURLOPT_SSLCERTTYPE | Формат сертификата. Поддерживаются форматы «PEM» (по умолчанию), «DER» и «ENG». | Добавлен в версии cURL 7.9.3. |
CURLOPT_SSLENGINE | Идентификатор механизма шифрования для закрытого ключа SSL, указанного в параметре CURLOPT_SSLKEY . | |
CURLOPT_SSLENGINE_DEFAULT | Идентификатор механизма шифрования, используемого для ассиметричных операций шифрования. | |
CURLOPT_SSLKEY | Имя файла с закрытым ключом SSL. | |
CURLOPT_SSLKEYPASSWD | Тайный пароль, необходимый для использования закрытого
| |
CURLOPT_SSLKEYTYPE | Тип закрытого ключа SSL, указанного в параметреCURLOPT_SSLKEY . Поддерживаются следующиетипы ключей: «PEM» (по умолчанию), «DER» и «ENG». | |
CURLOPT_UNIX_SOCKET_PATH | Разрешает использовать доменные сокеты UNIX в качестве конечной точки для соединения и устанавливает путь к ним равным заданной строке (string). | Добавлено в cURL 7.40.0. Доступно с PHP 7.0.7. |
CURLOPT_URL | Загружаемый URL. Данный параметр может быть также установлен при инициализации сеанса с помощью curl_init(). | |
CURLOPT_USERAGENT | Содержимое заголовка «User-Agent: «, посылаемого в HTTP-запросе. | |
CURLOPT_USERNAME | Ипя пользователя для аутентификации. | Добавлено в cURL 7.19.1. Доступно с PHP 5.5.0. |
CURLOPT_USERPWD | Логин и пароль, используемые при соединении, указанные в формате «[username]:[password]». | |
CURLOPT_XOAUTh3_BEARER | Задает токен доступа OAuth 2.0. | Добавлено в cURL 7.33.0. Доступно с PHP 7.0.7. |
Как пользоваться curl | Losst
Нам часто приходится загружать различные файлы из интернета, например, исполняемые файлы программ, файлы скриптов, архивы с исходниками. Но не всегда это нужно делать через браузер. Во многих ситуациях гораздо проще выполнить все действия через терминал. Поскольку таким образом вы можете автоматизировать процесс. С другой стороны, веб-мастерам время от времени приходится тестировать доступность веб-сайтов, проверять отправляемые и получаемые заголовки и многое другое.
Для решения таких задач и задач подобного круга можно воспользоваться утилитой curl. Она позволяет решить намного более широкий круг задач, среди которых даже имитация действий пользователя на сайте. В этой статье мы рассмотрим как пользоваться curl, что это такое и зачем нужна эта программа.
Содержание статьи:
Что такое curl?
На самом деле, curl — это больше чем просто утилита командной строки для Linux или Windows. Это набор библиотек, в которых реализуются базовые возможности работы с URL страницами и передачи файлов. Библиотека поддерживает работу с протоколами: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, а также POP3, IMAP и SMTP. Она отлично подходит для имитации действий пользователя на страницах и других операций с URL адресами.
Поддержка библиотеки curl была добавлена в множество различных языков программирования и платформ. Утилита curl — это независимая обвертка для этой библиотеки. Именно на этой утилите мы и остановимся в этой статье.
Команда curl
Перед тем как перейти к описанию того как может использоваться команда curl linux, давайте разберем саму утилиту и ее основные опции, которые нам понадобятся. Синтаксис утилиты очень прост:
$ curl опции ссылка
Теперь рассмотрим основные опции:
- -# — отображать простой прогресс-бар во время загрузки;
- -0 — использовать протокол http 1.0;
- -1 — использовать протокол шифрования tlsv1;
- -2 — использовать sslv2;
- -3 — использовать sslv3;
- -4 — использовать ipv4;
- -6 — использовать ipv6;
- -A — указать свой USER_AGENT;
- -b — сохранить Cookie в файл;
- -c — отправить Cookie на сервер из файла;
- -C — продолжить загрузку файла с места разрыва или указанного смещения;
- -m — максимальное время ожидания ответа от сервера;
- -d — отправить данные методом POST;
- -D — сохранить заголовки, возвращенные сервером в файл;
- -e — задать поле Referer-uri, указывает с какого сайта пришел пользователь;
- -E — использовать внешний сертификат SSL;
- -f — не выводить сообщения об ошибках;
- -F — отправить данные в виде формы;
- -G — если эта опция включена, то все данные, указанные в опции -d будут передаваться методом GET;
- -H — передать заголовки на сервер;
- -I — получать только HTTP заголовок, а все содержимое страницы игнорировать;
- -j — прочитать и отправить cookie из файла;
- -J — удалить заголовок из запроса;
- -L — принимать и обрабатывать перенаправления;
- -s — максимальное количество перенаправлений с помощью Location;
- -o — выводить контент страницы в файл;
- -O — сохранять контент в файл с именем страницы или файла на сервере;
- -p — использовать прокси;
- —proto — указать протокол, который нужно использовать;
- -R — сохранять время последнего изменения удаленного файла;
- -s — выводить минимум информации об ошибках;
- -S — выводить сообщения об ошибках;
- -T — загрузить файл на сервер;
- -v — максимально подробный вывод;
- -y — минимальная скорость загрузки;
- -Y — максимальная скорость загрузки;
- -z — скачать файл, только если он был модифицирован позже указанного времени;
- -V — вывести версию.
Это далеко не все параметры curl linux, но здесь перечислено все основное, что вам придется использовать.
Как пользоваться curl?
Мы рассмотрели все, что касается теории работы с утилитой curl, теперь пришло время перейти к практике, и рассмотреть примеры команды curl.
Загрузка файлов
Самая частая задача — это загрузка файлов linux. Скачать файл очень просто. Для этого достаточно передать утилите в параметрах имя файла или html страницы:
curl https://raw.githubusercontent.com/curl/curl/master/README.md
Но тут вас ждет одна неожиданность, все содержимое файла будет отправлено на стандартный вывод. Чтобы записать его в какой-либо файл используйте:
curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md
А если вы хотите, чтобы полученный файл назывался так же, как и файл на сервере, используйте опцию -O:
curl -O https://raw.githubusercontent.com/curl/curl/master/README.md
Если загрузка была неожиданно прервана, вы можете ее возобновить:
curl -# -C - -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz
Если нужно, одной командой можно скачать несколько файлов:
curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README
Еще одна вещь, которая может быть полезной администратору — это загрузка файла, только если он был изменен:
curl -z 21-Dec-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README
Данная команда скачает файл, только если он был изменен после 21 декабря 2017.
Ограничение скорости
Вы можете ограничить скорость загрузки до необходимого предела, чтобы не перегружать сеть с помощью опции -Y:
curl --limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz
Здесь нужно указать количество килобайт в секунду, которые можно загружать. Также вы можете разорвать соединение если скорости недостаточно, для этого используйте опцию -Y:
curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md
Передача файлов
Загрузка файлов, это достаточно просто, но утилита позволяет выполнять и другие действия, например, отправку файлов на ftp сервер. Для этого существует опция -T:
curl -T login.txt ftp://speedtest.tele2.net/upload/
Или проверим отправку файла по HTTP, для этого существует специальный сервис:
curl -T ~/login.txt http://posttestserver.com/post.php
В ответе утилита сообщит где вы можете найти загруженный файл.
Отправка данных POST
Вы можете отправлять не только файлы, но и любые данные методом POST. Напомню, что этот метод используется для отправки данных различных форм. Для отправки такого запроса используйте опцию -d. Для тестирования будем пользоваться тем же сервисом:
curl -d "field1=val&fileld2=val1"http://posttestserver.com/post.php
Если вас не устраивает такой вариант отправки, вы можете сделать вид, что отправили форму. Для этого есть опция -F:
curl -F "password=@pass;type=text/plain" http://posttestserver.com/post.php
Здесь мы передаем формой поле password, с типом обычный текст, точно так же вы можете передать несколько параметров.
Передача и прием куки
Куки или Cookie используются сайтами для хранения некой информации на стороне пользователя. Это может быть необходимо, например, для аутентификации. Вы можете принимать и передавать Cookie с помощью curl. Чтобы сохранить полученные Cookie в файл используйте опцию -c:
curl -c cookie.txt http://posttestserver.com/post.php
Затем можно отправить cookie curl обратно:
curl -b cookie.txt http://posttestserver.com/post.php
Передача и анализ заголовков
Не всегда нам обязательно нужно содержимое страницы. Иногда могут быть интересны только заголовки. Чтобы вывести только их есть опция -I:
curl -I https://losst.ru
А опция -H позволяет отправить нужный заголовок или несколько на сервер, например, можно передать заголовок If-Modified-Since чтобы страница возвращалась только если она была изменена:
curl -I --header 'If-Modified-Since: Mon, 26 Dec 2016 18:13:12 GMT' https://losst.ru
Аутентификация curl
Если на сервере требуется аутентификация одного из распространенных типов, например, HTTP Basic или FTP, то curl очень просто может справиться с такой задачей. Для указания данных аутентификации просто укажите их через двоеточие в опции -u:
curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt
Точно так же будет выполняться аутентификация на серверах HTTP.
Использование прокси
Если вам нужно использовать прокси сервер для загрузки файлов, то это тоже очень просто. Достаточно задать адрес прокси сервера в опции -x:
curl -x proxysever.test.com:3128 http://google.co.in
Выводы
В этой статье мы рассмотрели как пользоваться curl, зачем нужна эта утилита и основные ее возможности. Несмотря на свою схожесть с wget, они очень сильно отличаются. Команда curl linux предназначена больше для анализа и имитации различных действий на сервере, тогда как wget больше подходит для загрузки файлов и краулинга сайтов.
Основы работы с API — Прием оплаты по API ЮKassa
ЮKassa — универсальное решение для работы с онлайн-платежами.
API ЮKassa построено на REST-принципах, работает с реальными объектами и обладает предсказуемым поведением.
С помощью этого API вы можете отправлять запросы на оплату, сохранять платежную информацию для повторных списаний, совершать возвраты и многое другое.
API в качестве основного протокола использует HTTP, а значит, подходит для разработки на любом языке программирования, который умеет работать с HTTP-библиотеками (cURL и другими).
API поддерживает POST и GET-запросы. POST-запросы используют JSON-аргументы,
GET-запросы работают со строками запросов. API всегда возвращает ответ в формате JSON, независимо от типа запроса.
Для аутентификации запросов необходимо использовать HTTP Basic Auth. В заголовках запросов в качестве имени пользователя необходимо передать идентификатор вашего магазина в ЮKassa, в качестве пароля — ваш секретный ключ (его нужно сгенерировать и активировать паролем из смс).
Пример запроса с аутентификацией
curl https://api.yookassa.ru/v3/payments/{payment_id} \
-u <Идентификатор магазина>:<Секретный ключ>
Узнать идентификатор и выпустить секретный ключ (а также перевыпустить и удалить неактуальный) можно в личном кабинете ЮKassa, в разделе Интеграция — Ключи API.
Секретный ключ отвечает за безопасность ваших данных. Храните его в защищенном месте и не публикуйте на сторонних ресурсах (например, вместе с примерами кода).
Пример запроса с использованием OAuth-токена
curl https://api.yookassa.ru/v3/payments/{payment_id} \
-H "Authorization: Bearer <OAuth-токен>"
OAuth-токен ЮKassa дает право выполнять финансовые операции от имени пользователя. Токен должен быть доступен только вашему приложению, поэтому не публикуйте его в открытых источниках и не сохраняйте в cookie браузера.
В контексте API идемпотентность означает,
что многократные запросы обрабатываются так же, как однократные.
Это значит, что получив повторный запрос с теми же параметрами, ЮKassa выдаст в ответе результат исходного запроса.
Такое поведение помогает избежать нежелательного повторения транзакций. Например, если при проведении платежа возникли проблемы с сетью, и соединение прервалось, вы сможете безопасно повторить нужный запрос неограниченное количество раз.
GET-запросы являются по умолчанию идемпотентными, так как не имеют нежелательных последствий.
Для обеспечения идемпотентности POST-запросов используется заголовок
Idempotence-Key
(или ключ идемпотентности).
Пример запроса с ключом идемпотентности
curl https://api.yookassa.ru/v3/refunds \
-X POST \
-u <Идентификатор магазина>:<Секретный ключ> \
-H 'Idempotence-Key: <Ключ идемпотентности>' \
-H 'Content-Type: application/json' \
-d '{
"amount": {
"value": "2.00",
"currency": "RUB"
},
"payment_id": "215d8da0-000f-50be-b000-0003308c89be"
}'
Если вы повторяете запрос с теми же данными и тем же ключом, API обрабатывает его как повторный. Если данные в запросе те же, а ключ идемпотентности отличается, запрос выполняется как новый.
В заголовке
Idempotence-Key
можно передавать любое значение, уникальное для этой операции на вашей стороне. Мы рекомендуем использовать V4 UUID.
ЮKassa обеспечивает идемпотентность в течение 24 часов после первого запроса, потом повторный запрос будет обработан как новый.
ЮKassa обрабатывает полученный запрос немедленно и возвращает результат обработки («успех» или «неудача»).
Если в течение 30 секунд невозможно дать точный ответ, например из-за неполадок на стороне эквайера, ЮKassa вернет HTTP-код 500 и попытается отменить операцию.
Чтобы узнать окончательный результат обработки запроса, повторите запрос с теми же данными и с тем же ключом идемпотентности. Рекомендуемая частота повторений: один раз в минуту до тех пор, пока ЮKassa не сообщит ответ, отличный от HTTP 500.
Если запрос обработан успешно, API вернет HTTP-код 200 и тело ответа.
Если в процессе обработки произойдет ошибка, API вернет объект ошибки и стандартный HTTP-код.
HTTP-код | Код ошибки | Описание |
---|---|---|
400 | invalid_request, not_supported | Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API. |
401 | invalid_credentials | [Basic Auth] Неверный идентификатор вашего аккаунта в ЮKassa или секретный ключ (имя пользователя и пароль при аутентификации). [OAuth 2.0] Невалидный OAuth-токен: он некорректный, устарел или его отозвали. Запросите токен заново. |
403 | forbidden | Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции. |
404 | not_found | Ресурс не найден. |
429 | too_many_requests | Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов. |
500 | internal_server_error | Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности. Рекомендуется повторять запрос с периодичностью один раз в минуту до тех пор, пока ЮKassa не сообщит результат обработки операции. |
Пример тела ответа ошибки
{
"type": "error",
"id": "ab5a11cd-13cc-4e33-af8b-75a74e18dd09",
"code": "invalid_request",
"description": "Idempotence key duplicated",
"parameter": "Idempotence-Key"
}
Неуспешные платежиТестированиеВходящие уведомленияБыстрый старт
Использование функций cURL в PHP — Linux Совет
cURL — это библиотека для передачи информации с использованием различных типов протоколов. Полная форма cURL — это Клиент для URL. Для cURL существует два типа библиотек. Одна библиотека — curl — это инструмент командной строки, который используется для отправки или получения файлов с помощью URL-адреса. HTTP, HTTPS, FTP, FTPS, TELNET, FILE, и т. Д. Протоколы поддерживаются curl . Другая библиотека — libcurl , представленная Дэниелом Стенбергом в 1997 году.Он используется для подключения и связи с разными типами серверов с использованием разных типов протоколов. Все протоколы curl также поддерживаются libcurl . Без этих протоколов libcurl поддерживает HTTP POST, HTTP PUT, сертификаты HTTPS, загрузку по FTP, загрузку на основе HTTP, туннелирование HTTP-прокси, аутентификацию и т. Д. В статье показано использование функций curl из библиотеки cURL с использованием PHP. сценарий.
PHP / cURL
Модуль PHP, который используется для доступа к функциям библиотеки libcurl , называется PHP / cURL .Вы должны проверить, включено это или нет в PHP, прежде чем тестировать примеры этого руководства. Вы можете выполнить функцию phpinfo () , чтобы проверить, включен ли этот модуль в PHP.
Если модуль не включен по умолчанию в PHP, выполните следующие команды, чтобы установить и включить php-curl в Ubuntu и перезапустить сервер Apache.
$ sudo apt install libapache2-mod-php php-curl
$ sudo service apache2 restart
Наиболее часто используемые функции curl
Название функции | Назначение |
---|---|
curl_init () | Он используется для инициализации сеанса cURL. |
curl_exec () | Используется для выполнения запущенного сеанса cURL. |
curl_close () | Используется для закрытия сеанса cURL. |
curl_error () | Используется для возврата последнего сообщения об ошибке текущего сеанса cURL. |
curl_errno | Используется для возврата номера последней ошибки текущего сеанса cURL. |
curl_setopt () | Используется для установки опции для передачи cURL. |
curl_setopt_array () | Он используется для установки нескольких опций для передачи cURL. |
curl_reset () | Используется для сброса всех параметров сеанса libcurl. |
curl_pause () | Используется для приостановки соединения. |
curl_version () | Используется для получения информации о версии cURL. |
Пример 1: Получить информацию с любого URL-адреса
Создайте файл PHP со следующим сценарием для получения информации с определенного URL-адреса.Функция curl_init () используется здесь для инициализации сеанса cURL для определенного URL-адреса. Первая функция curl_setopt () используется для возврата содержимого страницы по заданному URL-адресу. 1 передается как значение третьего аргумента этой функции, чтобы вернуть содержимое страницы в виде строкового значения. Затем вторая функция curl_setopt () используется для исключения информации заголовка из вывода. Функция curl_exec () выполнит сеанс cURL и сохранит возвращаемое значение в переменной $ result, которая будет напечатана позже.
php
// Инициализируем сеанс cURL
$ ch = curl_init («https://linuxhint.com/»);
// Вернуть содержимое страницы
curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);
// Удаляем информацию заголовка из вывода
curl_setopt ($ ch, CURLOPT_HEADER, 0);
// Выполнить сеанс cURL
$ result = curl_exec ($ ch);
// Распечатать возвращаемое значение веб-сайта
echo $ result;
// Закрываем сеанс cURL
curl_close ($ ch);
?>
Выход:
Следующий вывод появится после выполнения вышеуказанного сценария.«Https://linuxhint.com» указывается в скрипте как URL-адрес. Итак, содержание этого сайта отображается.
Пример 2: Записать вывод cURL в файл
В предыдущем примере вывод скрипта показан в браузере. Но вы можете сохранить возвращаемое значение любого URL-адреса в файле также с помощью cURL. Создайте файл PHP со следующим сценарием, чтобы получить URL-адрес с помощью HTML-формы и инициализировать сеанс cURL для этого URL-адреса и сохранить содержимое страницы в текстовом файле, а не отображать его в браузере. CURLOPT_FILE Параметр используется в функции curl_setopt () для сохранения вывода после выполнения сеанса cURL в файл output.txt . Если форма отправляет неверный URL-адрес, информация об ошибке будет записана в файл вместо содержимого страницы.
php
// Проверяем, нажата ли кнопка отправки или нет
if (isset ($ _ GET [‘url’]))
{
// Проверяем URL пуст или нет
if ($ _ GET [‘url’]! = «»)
{
// Установить значение URL
$ url = $ _GET [‘url’];
// Инициализируем сеанс cURL
$ ch = curl_init ($ url);
// Обработчик открытия файла для записи в текстовый файл
$ fh = fopen («output.txt «,» w «);
// Установить опцию для записи вывода в файл aa
curl_setopt ($ ch, CURLOPT_FILE, $ fh);
// Включить информацию заголовка в файл
curl_setopt ($ ch, CURLOPT_HEADER , 1);
// Выполнить сеанс cURL
curl_exec ($ ch);
// Проверить наличие ошибок cURL
if (curl_error ($ ch)) {
$ error = curl_errno ($ ch) ». : «. curl_error ($ ch);
fwrite ($ fh, $ error);
}
echo» Вывод сеанса cURL был записан в вывод.txt
file «;
// Закройте сеанс cURL
curl_close ($ ch);
// Закройте файл
fclose ($ fh);
}
else
{
echo» URL-адрес не указан набор. «;
}
}
?>
Выход:
После запуска скрипта появится следующая форма. Здесь действительный URL-адрес указан как URL-адрес.
Следующий вывод появится после нажатия кнопки отправки.
Пример 3: Установить опцию cURL с использованием массива
Если вы хотите установить несколько параметров cURL во время выполнения сеанса cURL, вы должны использовать функцию curl_setopt_array (). Чтобы узнать об использовании этой функции, создайте файл PHP со следующим сценарием. Две опции cURL устанавливаются с помощью переменной массива, и эта переменная передается как переменная опции функции curl_setopt_array () .
php
// Определить массив опций
$ defaults = array (
CURLOPT_URL => ‘http: // example.com / ‘,
CURLOPT_POST => true
);
// Инициализируем сеанс cURL
$ ch = curl_init ();
// Возвращаем содержимое страницы на основе массива опций
curl_setopt_array ($ ch, $ defaults);
// Распечатать возвращаемое значение
echo curl_exec ($ ch);
?>
Выход:
После запуска сценария появится следующий вывод. «Http://example.com» указывается в скрипте как URL-адрес.
Заключение
Простое использование cURL в PHP показано в этом руководстве на различных примерах.В PHP существует множество встроенных функций cURL для выполнения различных типов задач. Это руководство поможет читателям узнать об основных способах использования cURL в PHP.
Как добавить заголовок к запросу cURL?
PHP-код для примера Curl Add Header
Этот фрагмент PHP-кода был автоматически сгенерирован для примера Curl Add Header.
<< Вернуться к примеру заголовка добавления Curl
Что такое cURL?
cURL (расшифровывается как Client URL) — популярный инструмент командной строки, который можно использовать для передачи данных на / с сервера с использованием ряда сетевых протоколов, включая HTTP, HTTPS и FTP.Разработчики могут использовать библиотеку проекта cURL (libcurl) для выполнения HTTP-запросов непосредственно из своих приложений.
Могу ли я отправлять собственные заголовки HTTP с помощью cURL?
Да, вы можете добавить любой настраиваемый HTTP-заголовок в свой запрос cURL с помощью параметра командной строки -H и отправить его на сервер. Обратите внимание, что до 2011 г. рекомендуется называть настраиваемые заголовки HTTP с префиксом X-, чтобы подчеркнуть, что это нестандартный заголовок HTTP. Однако эта рекомендация была устарела в июне 2012 года, и в RFC 6648 теперь указывается, что создателям новых параметров заголовка НЕ СЛЕДУЕТ ставить перед именами параметров префиксы «X-» или аналогичные префиксы.
-H "Accept: application / json"
Могу ли я отправлять заголовки cURL с запросом HTTP POST?
Да, вы можете отправить любое количество дополнительных заголовков HTTP с запросом POST. Например, при отправке JSON на сервер вы можете указать тип данных в теле запроса, используя заголовок Content-Type: application / json, и сообщить серверу, что клиент cURL ожидает JSON, используя Accept: application / json «. Если вы не передадите эти дополнительные заголовки с запросом cURL POST, сервер может неверно интерпретировать данные запроса или вернуть ответ в другом формате.
Могу ли я получать только заголовки HTTP с помощью cURL?
Да, параметр командной строки -I или —head cURL позволяет получать заголовки HTTP только с сервера, отправляя запрос HEAD. Метод запроса HTTP HEAD идентичен методу GET, за исключением того, что сервер не возвращает тело сообщения HTTP.
curl -I https://reqbin.com/echo
Пример настраиваемых заголовков cURL
Пример отправки данных JSON на сервер с дополнительными заголовками HTTP Accept и Content-Type.
Пример заголовков cURL
curl -X POST https://reqbin.com/echo/post/json
-H «Принять: приложение / json»
-H "Content-Type: application / json"
-d "{\" логин \ ": \" my_login \ ", \" пароль \ ": \" my_password \ "}"
PHP / cURL
Когда разработчики говорят cUrl в PHP или libcurl в PHP, возникают некоторые недопонимания. Но в большинстве случаев они имеют в виду PHP / CURL.
В этом руководстве мы сначала узнаем, что такое cUrl, libcurl и PHP / CURL, потому что мы хотим, чтобы все знали о различиях в этих трех концепциях.Затем мы перейдем к завершению задачи с помощью PHP / cURL.
Задача, которую мы выполним в конце этого руководства, — получить содержимое страницы Google, передав поисковый запрос «curl». И мы также предоставим некоторую справочную информацию о том, как вы можете расширить это руководство, чтобы продолжить.
Мы опубликовали следующий учебник на сайте From PHP / cURL to Guzzle.
Содержание
- Введение
- Завершите цель
- Подробнее
- Конец
Содержимое
1.Введение
Во-первых, давайте разберемся с концепциями 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.
Теперь у вас есть представление о различных терминах.
Что касается «PHP / cURL», большинство разработчиков также относят его к «curl в PHP», «curl с PHP» и так далее.В этом руководстве мы будем называть его «curl в PHP», чтобы следовать общепринятому термину.
Цель задачи в этом руководстве — использовать curl в PHP для получения данных из Google, а поисковый запрос, который будет отправлен в Google, — «curl».
Приступим к задаче!
2.Завершить гол
Использовать curl в PHP очень просто. Основная идея использования curl в PHP:
- Инициализировать сеанс curl
- Установить различные параметры для сеанса
- Выполнение и выборка / отправка данных с / на сервер
- Закройте сеанс
Для достижения нашей цели код прост, как
- step1 : Инициализировать сеанс curl с помощью curl_init ().
- шаг2 :
Установите параметр для CURLOPT_URL. Это значение является URL-адресом, на который мы отправляем запрос. Добавьте поисковый запрос «curl» с помощью параметра «q =».Установите параметр для CURLOPT_RETURNTRANSFER, true укажет curl, чтобы он возвращал строку, а не печатал ее.
Установите параметр для CURLOPT_HEADER, false укажет curl игнорировать заголовок в возвращаемом значении.
- step3 : выполнить сеанс curl с помощью curl_exec ().
- step4 : Закройте созданный нами сеанс curl.
- step5 : вывести возвращаемую строку.
3.Более
Очевидно, что с помощью curl в PHP можно выполнять больше задач, это руководство — почти самый простой способ его использования. Однако вы можете расширить его, чтобы выполнять больше задач, таких как
аутентификация в защищенной паролем учетной записи и получение данных оттуда.
Области, которые могут потребоваться для выполнения более сложных задач, перечислены ниже:
- curl_error () : Для более продвинутой системы вы всегда должны использовать curl_error () для проверки ошибок на основе возвращаемого значения (bool) curl_exec ().
- curl_setopt () :
Есть большое количество вариантов. Взгляните на файл руководства. На этой странице есть четкое объяснение различных опций.
4. конец
Спасибо, что прочитали эту статью, и если вы столкнулись с чем-то другим, у вас есть другое решение или вы считаете, что наше решение неверно, сообщите нам об этом в разделе комментариев.
Мы будем очень рады это услышать.
Если вам нравится наш учебник, подпишитесь на нас в Twitter и помогите распространить информацию.Нам нужна ваша поддержка, чтобы продолжить.
Как отправить запрос PHP cURL POST в Codeigniter
Если вы хотите узнать, как отправить или сделать запрос CURL POST в Codeigniter, то этот учебник завершит ваш учебный квест о PHP Curl POST в Codeigniter. Когда дело доходит до получения данных со сторонней конечной точки в Codeigniter, вы можете полагаться только на запрос CURL по любому другому методу.
Вы имеете дело с REST API или даже сторонними веб-службами? Не волнуйтесь, и вы можете использовать функции php curl для обработки запросов GET, POST, PUT, DELTE в Codeigniter с функциями PHP CURL.Это не только удобно, но и приятно для веб-разработчиков.
Пример запроса cURL PHP Codeigniter
В этом руководстве я покажу вам пример запроса PHP cURL, который также поможет вам справиться с заголовками при аутентификации. Мы можем воспользоваться помощью следующих функций PHP curl, чтобы получить ответ JSON через API:
- curl_setopt () : этот метод устанавливает параметр для передачи cURL
- curl_init () : инициализировать новый сеанс и вернуться дескриптор cURL для использования с функциями curl_setopt (), curl_exec () и curl_close ().
- curl_exec () : рекомендуется вызывать этот метод после вызова сеанса cURL вместе с каждым установленным сеансом. option
php if (! defined ('BASEPATH')) exit ('Прямой доступ к скрипту не разрешен');
class CurlController расширяет CI_Controller {
публичная функция __construct () {
родитель :: __ construct ();
}
публичная функция curPostRequest ()
{
$ url = 'http://www.localhost.com/endpoint';
$ curl = curl_init ($ url);
$ data = [
'name' => 'Джон Доу',
'email' => 'johndoe @ yahoo.com '
];
curl_setopt ($ curl, CURLOPT_POSTFIELDS, $ data);
curl_setopt ($ curl, CURLOPT_HTTPHEADER, массив ('Content-Type: application / json'));
curl_setopt ($ curl, CURLOPT_RETURNTRANSFER, истина);
$ result = curl_exec ($ curl);
curl_close ($ curl);
}
}
Давайте посмотрим на пример cURL аутентификации заголовка:
Php if (! Defined ('BASEPATH')) exit ('Прямой доступ к скрипту разрешен');
class CurlController расширяет CI_Controller {
публичная функция __construct () {
родитель :: __ construct ();
}
публичная функция curPostRequest ()
{
$ url = 'http: // www.localhost.com/endpoint ';
$ curl = curl_init ($ url);
$ data = [
'name' => 'Джон Доу',
'email' => '[email protected]'
];
curl_setopt ($ curl, CURLOPT_POSTFIELDS, $ data);
curl_setopt ($ curl, CURLOPT_HTTPHEADER, массив (
'Content-Type: application / json',
'Ключ приложения: JJEK8L4',
'Секрет приложения: 2zqAzq6'
));
curl_setopt ($ curl, CURLOPT_RETURNTRANSFER, истина);
$ result = curl_exec ($ curl);
curl_close ($ curl);
}
}
Отправка электронной почты с помощью PHP и SendGrid — документация по SendGrid | SendGrid
Мы рекомендуем использовать SendGrid PHP, нашу клиентскую библиотеку, доступную на GitHub, с полной документацией.
Библиотека официально не поддерживает V2 API, но вы можете использовать V2 со старой версией библиотеки. Для получения дополнительной информации см. Продолжение использования V2 в PHP.
Использование библиотеки PHP SendGrid
// с использованием библиотеки PHP SendGrid
// https://github.com/sendgrid/sendgrid-php
требуется 'vendor / autoload.php';
$ sendgrid = новый SendGrid ("SENDGRID_APIKEY");
$ email = новый SendGrid \ Email ();
$ email-> addTo ("[email protected]")
-> setFrom ("you @ youremail.com ")
-> setSubject («Отправка с помощью SendGrid - это весело»)
-> setHtml ("и легко делать где угодно, даже с PHP");
$ sendgrid-> отправить ($ email);
Использование PHP с cURL
Если вы решите не использовать клиентскую библиотеку SendGrid, вы можете использовать функцию PHP cURL для запроса веб-API.
Php
требуется 'vendor / autoload.php';
Dotenv :: load (__ DIR__);
$ sendgrid_apikey = getenv ('ВАШ_SENDGRID_APIKEY');
$ sendgrid = новый SendGrid ($ sendgrid_apikey);
$ url = 'https: // api.sendgrid.com/ ';
$ pass = $ sendgrid_apikey;
$ template_id = '';
$ js = массив (
'sub' => array (': name' => array ('Elmer')),
'фильтры' => массив ('шаблоны' => массив ('настройки' => массив ('включить' => 1, 'template_id' => $ template_id)))
);
$ params = массив (
'to' => "[email protected]",
'toname' => «Пример пользователя»,
'from' => "[email protected]",
'fromname' => "Ваше имя",
'subject' => «Тест PHP»,
'text' => "Я пишу!",
'html' => " Я HTML! ",
'x-smtpapi' => json_encode ($ js),
);
$ request = $ url.'api / mail.send.json';
// Генерируем запрос на завиток
$ session = curl_init ($ запрос);
// Сообщаем PHP не использовать SSLv3 (вместо этого выбираем TLS)
curl_setopt ($ сеанс, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt ($ session, CURLOPT_HTTPHEADER, array ('Авторизация: предъявитель'. $ sendgrid_apikey));
// Сообщаем curl использовать HTTP POST
curl_setopt ($ сеанс, CURLOPT_POST, истина);
// Сообщаем curl, что это тело POST
curl_setopt ($ session, CURLOPT_POSTFIELDS, $ params);
// Сообщаем curl не возвращать заголовки, но возвращать ответ
curl_setopt ($ сеанс, CURLOPT_HEADER, ложь);
curl_setopt ($ session, CURLOPT_RETURNTRANSFER, истина);
// получаем ответ
$ response = curl_exec ($ сеанс);
curl_close ($ сеанс);
// распечатать все
print_r ($ ответ);
?>
Электронное письмо, отправленное с использованием заголовка SMTPAPI
Этот пример продвигает предыдущий пример на шаг вперед, добавляя наш заголовок SMTPAPI для установки категории и отправки нескольким получателям.Категория называется test_category, и электронное письмо будет отправлено как на [email protected], так и на [email protected]. Обычный адрес, [email protected], не получит электронное письмо.
Php
$ url = 'https://api.sendgrid.com/';
$ user = 'ИМЯ ПОЛЬЗОВАТЕЛЯ';
$ pass = 'APIKEY';
$ json_string = массив (
'к' => массив (
[email protected], [email protected]
),
'category' => 'test_category'
);
$ params = массив (
'api_user' => $ пользователь,
'api_key' => $ проход,
'x-smtpapi' => json_encode ($ json_string),
'to' => 'example3 @ sendgrid.com ',
'subject' => 'тестирование из curl',
'html' => 'test body',
'text' => 'Test body',
'from' => '[email protected]',
);
$ request = $ url.'api / mail.send.json ';
// Генерируем запрос на завиток
$ session = curl_init ($ запрос);
// Сообщаем curl использовать HTTP POST
curl_setopt ($ сеанс, CURLOPT_POST, истина);
// Сообщаем curl, что это тело POST
curl_setopt ($ session, CURLOPT_POSTFIELDS, $ params);
// Сообщаем curl не возвращать заголовки, но возвращать ответ
curl_setopt ($ сеанс, CURLOPT_HEADER, ложь);
// Сообщаем PHP не использовать SSLv3 (вместо этого выбираем TLS)
curl_setopt ($ сеанс, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt ($ session, CURLOPT_RETURNTRANSFER, истина);
// получаем ответ
$ response = curl_exec ($ сеанс);
curl_close ($ сеанс);
// распечатать все
print_r ($ ответ);
?>
Электронное письмо с вложением файла
В этом примере добавляется дополнительный параметр вложения для прикрепления файла с именем myfile.В этом примере предполагается, что файл находится в том же каталоге, что и ваш код, в противном случае вам нужно указать полный путь к файлу в переменной $ filePath.
Php
$ url = 'https://api.sendgrid.com/';
$ user = 'ИМЯ ПОЛЬЗОВАТЕЛЯ';
$ pass = 'ПАРОЛЬ';
$ fileName = 'myfile';
$ filePath = имя каталога (__ FILE__);
$ params = массив (
'api_user' => $ пользователь,
'api_key' => $ проход,
'to' => '[email protected]',
'subject' => 'проверка отправки файла',
'html' => ' HTML
',
'text' => 'простой текст',
'from' => 'пример @ sendgrid.com ',
'files ['. $ fileName. ']' =>'@'.$filePath.'/'.$fileName.
);
print_r ($ params);
$ request = $ url.'api / mail.send.json ';
// Генерируем запрос на завиток
$ session = curl_init ($ запрос);
// Сообщаем curl использовать HTTP POST
curl_setopt ($ сеанс, CURLOPT_POST, истина);
// Сообщаем curl, что это тело POST
curl_setopt ($ session, CURLOPT_POSTFIELDS, $ params);
// Сообщаем curl не возвращать заголовки, но возвращать ответ
curl_setopt ($ сеанс, CURLOPT_HEADER, ложь);
// Сообщаем PHP не использовать SSLv3 (вместо этого выбираем TLS)
curl_setopt ($ сеанс, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt ($ session, CURLOPT_RETURNTRANSFER, истина);
// получаем ответ
$ response = curl_exec ($ сеанс);
curl_close ($ сеанс);
// распечатать все
print_r ($ ответ);
?>
Одновременные HTTP-запросы в PHP с cURL / Stoyan phpied.com
Основная идея «мэшапа» в стиле Web 2.0 состоит в том, что вы потребляете данные из нескольких служб, часто от разных поставщиков, и объединяете их интересными способами. Это означает, что вам часто нужно выполнить более одного HTTP-запроса к службе или службам. В PHP, если вы используете что-то вроде file_get_contents (), это означает, что все запросы будут синхронными: новый запускается только после завершения предыдущего. Если вам нужно сделать три HTTP-запроса, и каждый вызов занимает секунду, ваше приложение задерживается как минимум на три секунды.
Решение
Конечно, улучшение состоит в том, чтобы как можно больше кэшировать ответы, но в тот или иной момент вам все равно придется делать эти запросы.
Используя семейство функций cURL curl_multi *, вы можете делать эти запросы одновременно. Таким образом, ваше приложение будет таким же медленным, как самый медленный запрос, а не суммой всех запросов. И это кое-что.
Функция
Вот небольшая функция, которую я закодировал, которая позволит вам выполнять множественные запросы.
Php function multiRequest ($ data, $ options = array ()) { $ фигурный = массив (); $ результат = массив (); $ mh = curl_multi_init (); foreach ($ data as $ id => $ d) { $ кудрявый [$ id] = curl_init (); $ url = (is_array ($ d) &&! empty ($ d ['url']))? $ d ['url']: $ d; curl_setopt ($ curly [$ id], CURLOPT_URL, $ url); curl_setopt ($ curly [$ id], CURLOPT_HEADER, 0); curl_setopt ($ curly [$ id], CURLOPT_RETURNTRANSFER, 1); if (is_array ($ d)) { if (! empty ($ d ['post'])) { curl_setopt ($ curly [$ id], CURLOPT_POST, 1); curl_setopt ($ curly [$ id], CURLOPT_POSTFIELDS, $ d ['сообщение']); } } if (! empty ($ options)) { curl_setopt_array ($ curly [$ id], $ options); } curl_multi_add_handle ($ mh, $ curly [$ id]); } $ running = null; делать { curl_multi_exec ($ mh, $ работает); } while ($ running> 0); foreach ($ curly as $ id => $ c) { $ result [$ id] = curl_multi_getcontent ($ c); curl_multi_remove_handle ($ mh, $ c); } curl_multi_close ($ mh); вернуть результат $; } ?>
Потребление
Функция принимает массив URL-адресов для обращения и, необязательно, массив параметров cURL, если вам нужно их передать.Первый массив может быть простым индексированным массивом или URL-адресами, или это может быть массив массивов, где второй имеет ключ с именем «url»
. Если вы используете второй способ и у вас также есть ключ с именем «post»
, функция выполнит почтовый запрос.
Функция возвращает массив ответов в виде строк. Ключи в массиве результатов соответствуют ключам во входных данных.
Пример GET
Предположим, вы хотите использовать некоторые поисковые веб-службы Yahoo (обратитесь в YDN) для создания гибридного приложения типа музыкального исполнителя band-o-pedia.Вот как вы можете искать аудио, видео и изображения одновременно:
Php $ data = массив ( 'http://search.yahooapis.com/VideoSearchService/V1/videoSearch?appid=YahooDemo&query=Pearl+Jam&output=json', 'http://search.yahooapis.com/ImageSearchService/V1/imageSearch?appid=YahooDemo&query=Pearl+Jam&output=json', 'http://search.yahooapis.com/AudioSearchService/V1/artistSearch?appid=YahooDemo&artist=Pearl+Jam&output=json' ); $ r = multiRequest ($ данные); echo ''; print_r ($ г); ?>Это напечатает что-то вроде:
Массив ( [0] => {"ResultSet": {"totalResultsAvailable": "633", "totalResultsReturned" :... [1] => {"ResultSet": {"totalResultsAvailable": "105342", "totalResultsReturned": ... [2] => {"ResultSet": {"totalResultsAvailable": 10, "totalResultsReturned": ... )Пример сообщения POST
Есть интересная поисковая служба Yahoo, называемая извлечением терминов, которая анализирует контент. Он принимает запросы POST. Вот как использовать эту службу с помощью функции выше, выполняя два одновременных запроса:
Php $ data = массив (массив (), массив ()); $ data [0] ['url'] = 'http: // search.yahooapis.com/ContentAnalysisService/V1/termExtraction '; $ data [0] ['сообщение'] = массив (); $ data [0] ['сообщение'] ['appid'] = 'YahooDemo'; $ data [0] ['сообщение'] ['вывод'] = 'php'; $ data [0] ['post'] ['context'] = 'Теперь я ложусь спать, Я молю Господа сохранить мою душу; И если я умру до того, как проснусь, Я молю Господа забрать мою душу. '; $ data [1] ['url'] = 'http: // search.yahooapis.com/ContentAnalysisService/V1/termExtraction '; $ data [1] ['сообщение'] = массив (); $ data [1] ['сообщение'] ['appid'] = 'YahooDemo'; $ data [1] ['сообщение'] ['вывод'] = 'php'; $ data [1] ['post'] ['context'] = 'Теперь я ложусь спать, Я молюсь, чтобы фанк заставил меня сходить с ума; Если я умру до того, как проснусь, Позволь мне, Господь, раскачиваться голым. '; $ r = multiRequest ($ данные); print_r ($ г); ?>И результат:
Множество ( [0] => a: 1: {s: 9: "ResultSet"; a: 1: {s: 6: "Result"; s: 5: "sleep";}} [1] => a: 1: {s: 9: "ResultSet"; a: 1: {s: 6: "Результат"; a: 3: {i: 0; s: 5: "урод"; i: 1; s: 5: "сон"; i: 2; s: 4: "фанк";}}} )Расскажите своим друзьям об этом посте на
Facebook и
ТвиттерИзвините, комментарии отключены и скрыты из-за чрезмерного количества спама.