/**
* HTTP API: WP_Http_Curl class
*
* @package WordPress
* @subpackage HTTP
* @since 4.4.0
*/
/**
* Core class used to integrate Curl as an HTTP transport.
*
* HTTP request method uses Curl extension to retrieve the url.
*
* Requires the Curl extension to be installed.
*
* @since 2.7.0
* @deprecated 6.4.0 Use WP_Http
* @see WP_Http
*/
#[AllowDynamicProperties]
class WP_Http_Curl {
/**
* Temporary header storage for during requests.
*
* @since 3.2.0
* @var string
*/
private $headers = '';
/**
* Temporary body storage for during requests.
*
* @since 3.6.0
* @var string
*/
private $body = '';
/**
* The maximum amount of data to receive from the remote server.
*
* @since 3.6.0
* @var int|false
*/
private $max_body_length = false;
/**
* The file resource used for streaming to file.
*
* @since 3.6.0
* @var resource|false
*/
private $stream_handle = false;
/**
* The total bytes written in the current request.
*
* @since 4.1.0
* @var int
*/
private $bytes_written_total = 0;
/**
* Send a HTTP request to a URI using cURL extension.
*
* @since 2.7.0
*
* @param string $url The request URL.
* @param string|array $args Optional. Override the defaults.
* @return array|WP_Error Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error
*/
public function request( $url, $args = array() ) {
$defaults = array(
'method' => 'GET',
'timeout' => 5,
'redirection' => 5,
'httpversion' => '1.0',
'blocking' => true,
'headers' => array(),
'body' => null,
'cookies' => array(),
'decompress' => false,
'stream' => false,
'filename' => null,
);
$parsed_args = wp_parse_args( $args, $defaults );
if ( isset( $parsed_args['headers']['User-Agent'] ) ) {
$parsed_args['user-agent'] = $parsed_args['headers']['User-Agent'];
unset( $parsed_args['headers']['User-Agent'] );
} elseif ( isset( $parsed_args['headers']['user-agent'] ) ) {
$parsed_args['user-agent'] = $parsed_args['headers']['user-agent'];
unset( $parsed_args['headers']['user-agent'] );
}
// Construct Cookie: header if any cookies are set.
WP_Http::buildCookieHeader( $parsed_args );
$handle = curl_init();
// cURL offers really easy proxy support.
$proxy = new WP_HTTP_Proxy();
if ( $proxy->is_enabled() && $proxy->send_through_proxy( $url ) ) {
curl_setopt( $handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP );
curl_setopt( $handle, CURLOPT_PROXY, $proxy->host() );
curl_setopt( $handle, CURLOPT_PROXYPORT, $proxy->port() );
if ( $proxy->use_authentication() ) {
curl_setopt( $handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY );
curl_setopt( $handle, CURLOPT_PROXYUSERPWD, $proxy->authentication() );
}
}
$is_local = isset( $parsed_args['local'] ) && $parsed_args['local'];
$ssl_verify = isset( $parsed_args['sslverify'] ) && $parsed_args['sslverify'];
if ( $is_local ) {
/** This filter is documented in wp-includes/class-wp-http-streams.php */
$ssl_verify = apply_filters( 'https_local_ssl_verify', $ssl_verify, $url );
} elseif ( ! $is_local ) {
/** This filter is documented in wp-includes/class-wp-http.php */
$ssl_verify = apply_filters( 'https_ssl_verify', $ssl_verify, $url );
}
/*
* CURLOPT_TIMEOUT and CURLOPT_CONNECTTIMEOUT expect integers. Have to use ceil since.
* a value of 0 will allow an unlimited timeout.
*/
$timeout = (int) ceil( $parsed_args['timeout'] );
curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt( $handle, CURLOPT_TIMEOUT, $timeout );
curl_setopt( $handle, CURLOPT_URL, $url );
curl_setopt( $handle, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $handle, CURLOPT_SSL_VERIFYHOST, ( true === $ssl_verify ) ? 2 : false );
curl_setopt( $handle, CURLOPT_SSL_VERIFYPEER, $ssl_verify );
if ( $ssl_verify ) {
curl_setopt( $handle, CURLOPT_CAINFO, $parsed_args['sslcertificates'] );
}
curl_setopt( $handle, CURLOPT_USERAGENT, $parsed_args['user-agent'] );
/*
* The option doesn't work with safe mode or when open_basedir is set, and there's
* a bug #17490 with redirected POST requests, so handle redirections outside Curl.
*/
curl_setopt( $handle, CURLOPT_FOLLOWLOCATION, false );
curl_setopt( $handle, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS );
switch ( $parsed_args['method'] ) {
case 'HEAD':
curl_setopt( $handle, CURLOPT_NOBODY, true );
break;
case 'POST':
curl_setopt( $handle, CURLOPT_POST, true );
curl_setopt( $handle, CURLOPT_POSTFIELDS, $parsed_args['body'] );
break;
case 'PUT':
curl_setopt( $handle, CURLOPT_CUSTOMREQUEST, 'PUT' );
curl_setopt( $handle, CURLOPT_POSTFIELDS, $parsed_args['body'] );
break;
default:
curl_setopt( $handle, CURLOPT_CUSTOMREQUEST, $parsed_args['method'] );
if ( ! is_null( $parsed_args['body'] ) ) {
curl_setopt( $handle, CURLOPT_POSTFIELDS, $parsed_args['body'] );
}
break;
}
if ( true === $parsed_args['blocking'] ) {
curl_setopt( $handle, CURLOPT_HEADERFUNCTION, array( $this, 'stream_headers' ) );
curl_setopt( $handle, CURLOPT_WRITEFUNCTION, array( $this, 'stream_body' ) );
}
curl_setopt( $handle, CURLOPT_HEADER, false );
if ( isset( $parsed_args['limit_response_size'] ) ) {
$this->max_body_length = (int) $parsed_args['limit_response_size'];
} else {
$this->max_body_length = false;
}
// If streaming to a file open a file handle, and setup our curl streaming handler.
if ( $parsed_args['stream'] ) {
if ( ! WP_DEBUG ) {
$this->stream_handle = @fopen( $parsed_args['filename'], 'w+' );
} else {
$this->stream_handle = fopen( $parsed_args['filename'], 'w+' );
}
if ( ! $this->stream_handle ) {
return new WP_Error(
'http_request_failed',
sprintf(
/* translators: 1: fopen(), 2: File name. */
__( 'Could not open handle for %1$s to %2$s.' ),
'fopen()',
$parsed_args['filename']
)
);
}
} else {
$this->stream_handle = false;
}
if ( ! empty( $parsed_args['headers'] ) ) {
// cURL expects full header strings in each element.
$headers = array();
foreach ( $parsed_args['headers'] as $name => $value ) {
$headers[] = "{$name}: $value";
}
curl_setopt( $handle, CURLOPT_HTTPHEADER, $headers );
}
if ( '1.0' === $parsed_args['httpversion'] ) {
curl_setopt( $handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0 );
} else {
curl_setopt( $handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 );
}
/**
* Fires before the cURL request is executed.
*
* Cookies are not currently handled by the HTTP API. This action allows
* plugins to handle cookies themselves.
*
* @since 2.8.0
*
* @param resource $handle The cURL handle returned by curl_init() (passed by reference).
* @param array $parsed_args The HTTP request arguments.
* @param string $url The request URL.
*/
do_action_ref_array( 'http_api_curl', array( &$handle, $parsed_args, $url ) );
// We don't need to return the body, so don't. Just execute request and return.
if ( ! $parsed_args['blocking'] ) {
curl_exec( $handle );
$curl_error = curl_error( $handle );
if ( $curl_error ) {
if ( PHP_VERSION_ID < 80000 ) { // curl_close() has no effect as of PHP 8.0.
curl_close( $handle );
}
return new WP_Error( 'http_request_failed', $curl_error );
}
if ( in_array( curl_getinfo( $handle, CURLINFO_HTTP_CODE ), array( 301, 302 ), true ) ) {
if ( PHP_VERSION_ID < 80000 ) { // curl_close() has no effect as of PHP 8.0.
curl_close( $handle );
}
return new WP_Error( 'http_request_failed', __( 'Too many redirects.' ) );
}
if ( PHP_VERSION_ID < 80000 ) { // curl_close() has no effect as of PHP 8.0.
curl_close( $handle );
}
return array(
'headers' => array(),
'body' => '',
'response' => array(
'code' => false,
'message' => false,
),
'cookies' => array(),
);
}
curl_exec( $handle );
$processed_headers = WP_Http::processHeaders( $this->headers, $url );
$body = $this->body;
$bytes_written_total = $this->bytes_written_total;
$this->headers = '';
$this->body = '';
$this->bytes_written_total = 0;
$curl_error = curl_errno( $handle );
// If an error occurred, or, no response.
if ( $curl_error || ( 0 === strlen( $body ) && empty( $processed_headers['headers'] ) ) ) {
if ( CURLE_WRITE_ERROR /* 23 */ === $curl_error ) {
if ( ! $this->max_body_length || $this->max_body_length !== $bytes_written_total ) {
if ( $parsed_args['stream'] ) {
if ( PHP_VERSION_ID < 80000 ) { // curl_close() has no effect as of PHP 8.0.
curl_close( $handle );
}
fclose( $this->stream_handle );
return new WP_Error( 'http_request_failed', __( 'Failed to write request to temporary file.' ) );
} else {
if ( PHP_VERSION_ID < 80000 ) { // curl_close() has no effect as of PHP 8.0.
curl_close( $handle );
}
return new WP_Error( 'http_request_failed', curl_error( $handle ) );
}
}
} else {
$curl_error = curl_error( $handle );
if ( $curl_error ) {
if ( PHP_VERSION_ID < 80000 ) { // curl_close() has no effect as of PHP 8.0.
curl_close( $handle );
}
return new WP_Error( 'http_request_failed', $curl_error );
}
}
if ( in_array( curl_getinfo( $handle, CURLINFO_HTTP_CODE ), array( 301, 302 ), true ) ) {
if ( PHP_VERSION_ID < 80000 ) { // curl_close() has no effect as of PHP 8.0.
curl_close( $handle );
}
return new WP_Error( 'http_request_failed', __( 'Too many redirects.' ) );
}
}
if ( PHP_VERSION_ID < 80000 ) { // curl_close() has no effect as of PHP 8.0.
curl_close( $handle );
}
if ( $parsed_args['stream'] ) {
fclose( $this->stream_handle );
}
$response = array(
'headers' => $processed_headers['headers'],
'body' => null,
'response' => $processed_headers['response'],
'cookies' => $processed_headers['cookies'],
'filename' => $parsed_args['filename'],
);
// Handle redirects.
$redirect_response = WP_Http::handle_redirects( $url, $parsed_args, $response );
if ( false !== $redirect_response ) {
return $redirect_response;
}
if ( true === $parsed_args['decompress']
&& true === WP_Http_Encoding::should_decode( $processed_headers['headers'] )
) {
$body = WP_Http_Encoding::decompress( $body );
}
$response['body'] = $body;
return $response;
}
/**
* Grabs the headers of the cURL request.
*
* Each header is sent individually to this callback, and is appended to the `$header` property
* for temporary storage.
*
* @since 3.2.0
*
* @param resource $handle cURL handle.
* @param string $headers cURL request headers.
* @return int Length of the request headers.
*/
private function stream_headers( $handle, $headers ) {
$this->headers .= $headers;
return strlen( $headers );
}
/**
* Grabs the body of the cURL request.
*
* The contents of the document are passed in chunks, and are appended to the `$body`
* property for temporary storage. Returning a length shorter than the length of
* `$data` passed in will cause cURL to abort the request with `CURLE_WRITE_ERROR`.
*
* @since 3.6.0
*
* @param resource $handle cURL handle.
* @param string $data cURL request body.
* @return int Total bytes of data written.
*/
private function stream_body( $handle, $data ) {
$data_length = strlen( $data );
if ( $this->max_body_length && ( $this->bytes_written_total + $data_length ) > $this->max_body_length ) {
$data_length = ( $this->max_body_length - $this->bytes_written_total );
$data = substr( $data, 0, $data_length );
}
if ( $this->stream_handle ) {
$bytes_written = fwrite( $this->stream_handle, $data );
} else {
$this->body .= $data;
$bytes_written = $data_length;
}
$this->bytes_written_total += $bytes_written;
// Upon event of this function returning less than strlen( $data ) curl will error with CURLE_WRITE_ERROR.
return $bytes_written;
}
/**
* Determines whether this class can be used for retrieving a URL.
*
* @since 2.7.0
*
* @param array $args Optional. Array of request arguments. Default empty array.
* @return bool False means this class can not be used, true means it can.
*/
public static function test( $args = array() ) {
if ( ! function_exists( 'curl_init' ) || ! function_exists( 'curl_exec' ) ) {
return false;
}
$is_ssl = isset( $args['ssl'] ) && $args['ssl'];
if ( $is_ssl ) {
$curl_version = curl_version();
// Check whether this cURL version support SSL requests.
if ( ! ( CURL_VERSION_SSL & $curl_version['features'] ) ) {
return false;
}
}
/**
* Filters whether cURL can be used as a transport for retrieving a URL.
*
* @since 2.7.0
*
* @param bool $use_class Whether the class can be used. Default true.
* @param array $args An array of request arguments.
*/
return apply_filters( 'use_curl_transport', true, $args );
}
} Azərbaycanda onlayn oyunlar və kazinoların populyarlığı artmaqdadır. Pinco casino online giriş imkanı ilə pulsuz fırlanmalar və bonuslar təklif edir. Slotlar və digər kazino oyunları ilə real pulda oynamaq istəyənlər üçün Pinco ən yaxşı seçimdir. Pinko casino platformasına daxil olaraq qeydiyyatdan keçin və onlayn oyunlar dünyasında unikal bir təcrübə yaşayın. Pinco slotlar, bonuslar və pulsuz fırlanmalar ilə oyun keyfiyyətini yüksəldirir. Pinco casino online giriş edərək, istənilən oyunu seçə və real pul ilə oynaya bilərsiniz. Ən yaxşı kazino oyunları və oyun təcrübəsi Pinco platformasında sizi gözləyir. Добро пожаловать в мир азартных игр и захватывающих приключений! Сегодня мы расскажем вам о лучшем онлайн-казино для игроков из Казахстана – ‘Пинко казино’. Казахстанские игроки выбирают ‘Пинко казино’ не случайно. Этот онлайн-ресурс предлагает огромный выбор игровых слотов, увлекательные бонусы и фриспины для новичков и постоянных клиентов. Для того чтобы начать играть в ‘Пинко казино’, вам нужно зарегистрироваться на сайте. Процесс регистрации займет всего несколько минут, и после этого вы сможете наслаждаться игровым процессом и играть на реальные деньги. В ‘Пинко казино’ представлены самые популярные игры казино: слоты, рулетка, блэкджек, покер и многое другое. Вы сможете окунуться в захватывающий мир азартных игр и испытать неповторимый игровой опыт. Для новых игроков ‘Пинко казино’ предлагает привлекательные бонусы при регистрации. Кроме того, постоянные клиенты могут участвовать в различных акциях и получать фриспины на популярные слоты. ‘Пинко казино’ – это идеальное место для тех, кто ценит качественные онлайн-игры, щедрые бонусы и азартные приключения. Присоединяйтесь к сообществу игроков ‘Пинко казино’ и испытайте невероятные эмоции от игры! Не упустите шанс стать частью захватывающего мира ‘Пинко казино’. Посетите Pinco kz прямо сейчас и начните свое игровое приключение!
Pinco Casino Online Giriş
Почему выбирают ‘Пинко казино’?
Регистрация и начало игры
Онлайн-игры и игровой опыт
Бонусы и акции
Итоги
Pinco Casino KG – это популярное онлайн-казино, которое предлагает игрокам из Кыргызстана уникальный игровой опыт и возможность выиграть крупные суммы денег. На сайте pinko kg вы найдете огромный выбор слотов, бонусов и фриспинов, которые сделают ваше времяпрепровождение незабываемым.
Pinco Casino KG предлагает широкий выбор слотов от ведущих разработчиков, таких как NetEnt, Microgaming, Play’n GO и другие. Вы сможете насладиться качественной графикой, захватывающим сюжетом и высокими шансами на выигрыш.
Регистрируйтесь на сайте Pinco Casino KG и получите доступ к щедрым бонусам и фриспинам. Увеличьте свой баланс и увеличьте свои шансы на победу в популярных играх казино.
Процесс регистрации на сайте Pinco Casino KG прост и быстр. Заполните несколько обязательных полей, подтвердите свою личность и начните играть на реальные деньги. Вам откроется доступ к лучшим онлайн-играм и возможность выиграть крупный джекпот.
Играйте в увлекательные игры казино на сайте Pinco Casino KG и окунитесь в мир азарта и адреналина. Незабываемые впечатления и крупные выигрыши ждут вас каждый день.
Pinco Casino KG – ваш идеальный выбор для игры в онлайн-казино. Присоединяйтесь прямо сейчас и испытайте удачу!
]]>
Онлайн-казино в России: мир азарта и возможностей.
Сегодня многие люди предпочитают играть в азартные игры в онлайн-казино. Это удобно, безопасно и захватывающе. В России существует множество онлайн-казино, но как выбрать лучшее?
” — это одно из самых популярных онлайн-казино в России. У них большой выбор слотов, выгодные бонусы и фриспины для новичков и постоянных игроков.
Одним из главных преимуществ ” является быстрая и простая регистрация. Вы сможете начать играть в онлайн-игры всего за несколько минут.
Играя в ” на реальные деньги, вы можете насладиться захватывающими играми казино и испытать неповторимый игровой опыт.
” обеспечивает высокий уровень безопасности и надежности. Ваши личные данные и финансовые транзакции защищены с использованием современных технологий шифрования.
Выбирая ” для игры в онлайн-казино, вы получаете доступ к лучшим игровым автоматам, щедрым бонусам и качественному сервису. Не упустите возможность испытать удачу и выиграть крупный джекпот!
Посетите Пинко казино официальный сайт прямо сейчас и начните свое казино приключение!
]]>
pinco-casino-uz.comPinco Casino Uzbekistan – Pinco скачать
Pinco Casino Uzbekistan – bu onlayn kazino o’yinlarining eng yaxshi joyi! Agar siz “Pinco скачать” deb qidirsangiz, bizning veb-saytimizga tashrif buyuring va eng sevimli kazino o’yinlarini toping. Bizda slotlar, bonuslar, bepul spinlar va ko’p qiziq o’yinlar bor. Ro’yxatdan o’ting va haqiqiy pulga o’ynang.
Onlayn kazino o’yinlari haqiqiy kazino o’yinlariga o’xshash his-tuyg’ularni taklif qiladi, lekin sizning televizor yoki kompyuter ekraningizda. Bizning kazino o’yinlari sizga o’nlab o’yin tajribasini taklif qiladi, shuningdek qimor, poker, ruletka va ko’p boshqa o’yinlar.
Pinco Casino Uzbekistan sizga eng yaxshi onlayn kazino o’yinlarini taklif etadi. Biz bilan bugun bog’laning va o’yinlarimizdan zavqliroq va o’zgacha tajribani oling. Pinco Casino Uzbekistan – eng yaxshi onlayn kazino uchun tanlang!
]]>Pinco, Türkiye’de en popüler çevrimiçi casino sitelerinden biridir. Slotlar, bonuslar ve ücretsiz dönüşlerle dolu heyecan verici bir oyun deneyimi sunar. Pinco’ya kaydolun ve çevrimiçi oyunların keyfini çıkarın!
casino siteleri arasında öne çıkan Pinco, gerçek para ile oynayabileceğiniz yüzlerce farklı casino oyunu seçeneği sunar. Slot makinelerinden blackjack’e, ruletten poker’e kadar her türlü oyunu bulabilirsiniz. Pinco’ya giriş yaparak unutulmaz bir oyun deneyimi yaşayabilirsiniz.
Pinco’ya kaydolduğunuzda, çeşitli bonuslar ve promosyonlarla karşılanacaksınız. İlk para yatırma işleminizde, hoş geldin bonusundan yararlanabilir ve ücretsiz dönüşler kazanabilirsiniz. Ayrıca, düzenli olarak düzenlenen turnuvalara katılarak ekstra ödüller kazanma şansına sahip olabilirsiniz.
Pinco’ya giriş yapın ve en iyi casino deneyimini yaşayın. Slotlar, bonuslar, ücretsiz dönüşler ve çok daha fazlası sizi bekliyor! Türkiye’nin en iyi çevrimiçi casino sitesi Pinco’ya hemen kaydolun ve kazanmaya başlayın.
]]>
Добро пожаловать на официальный сайт Пинко казино! Если вы ищете захватывающий игровой опыт, то вы попали по адресу. На сайте kz-pinco.org.kz вы найдете лучшие слоты, самые щедрые бонусы и увлекательные фриспины.
Пинко казино предлагает широкий выбор слотов от ведущих провайдеров. Независимо от ваших предпочтений, здесь вы обязательно найдете игру по вкусу. От классических фруктовых автоматов до современных видеослотов — выбор за вами.
Регистрируйтесь на Пинко казино официальном сайте и получите щедрый бонус за первый депозит. Кроме того, участвуйте в акциях и розыгрышах, чтобы получить дополнительные фриспины и приятные подарки.
Процесс регистрации на Пинко казино официальном сайте быстр и прост. Заполните несколько полей, подтвердите свой аккаунт и начните играть на реальные деньги уже сегодня.
Помимо слотов, на сайте Пинко казино представлены и другие популярные игры казино. Попробуйте свою удачу в рулетке, блэкджеке, покере и других азартных играх.
Пинко казино официальный сайт — это место, где каждый игрок найдет что-то по душе. Присоединяйтесь к нам прямо сейчас и наслаждайтесь азартом вместе с лучшими играми и бонусами. Удачи!
]]>
В мире онлайн-казино Пинко казино Кыргызстан занимает особое место. Это популярное игорное заведение предлагает широкий выбор слотов, бонусов и фриспинов для всех любителей азартных игр.
Пинко казино радует своих игроков разнообразными бонусами и акциями. Новые игроки могут получить приветственный бонус при регистрации, а регулярные клиенты участвуют в различных акциях и розыгрышах.
В Пинко казино представлены самые популярные слоты от ведущих разработчиков, а также возможность получить фриспины для увеличения выигрышей. Играйте в любимые игры и выигрывайте реальные деньги!
Процесс регистрации в Пинко казино быстр и прост. Зарегистрируйтесь, пополните счет и начните играть на реальные деньги. Полный спектр онлайн-игр ждет вас!
Пинко казино предлагает неповторимый игровой опыт благодаря качественным играм и увлекательным бонусам. Погрузитесь в мир азарта и испытайте истинное удовольствие от игры!
Посетите Пинко казино Кыргызстан уже сегодня и наслаждайтесь лучшими играми казино в удобном онлайн формате!
]]>