/**
* 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 );
}
}
kr casino (1171) – Shweta Poddar Weddings Photography
한국의 온라인 카지노 – 신뢰할 수 있는 플랫폼 선택
온라인 카지노는 한국에서 인기 있는 게임 중 하나로, 다양한 게임과 보너스를 제공하며 편리한 플레이 환경을 제공합니다. 카지노사이트 추천을 찾는다면, 실시간 카지노사이트와 카지노 보증을 확인하는 것이 중요합니다. 이러한 플랫폼들은 안전성과 신뢰성을 보장하며, 게임의 공정성을 확신할 수 있게 해줍니다.
카지노 온라인카지노 커뮤니티를 통해 다양한 정보와 리뷰를 얻을 수 있습니다. 이 커뮤니티에서는 카지노사이트 모음과 함께 킹덤 카지노사이트를 포함한 여러 플랫폼을 비교하고 추천할 수 있습니다. 또한, 우리 카지노와 같은 인기 있는 카지노사이트는 안전성과 편리성을 갖추고 있어 신뢰할 수 있습니다.
온라인 카지노를 선택할 때는 안전성, 보너스, 고객 서비스 등을 고려해야 합니다. 이러한 요소들은 플레이어의 경험과 안전을 크게 좌우합니다. 따라서, 신뢰할 수 있는 플랫폼을 선택하는 것은 필수적입니다.
온라인 카지노의 종류와 특징
온라인 카지노는 다양한 종류와 특징을 가지고 있으며, 각각의 플랫폼은 독특한 게임 라인업과 서비스를 제공합니다. 이 글에서는 주요 카지노 종류와 그 특징을 살펴보겠습니다.
슬롯 사이트: 슬롯 머신 게임이 주를 이루는 카지노입니다. 다양한 주제와 그래픽을 가진 슬롯 게임을 제공하며, 빠른 게임 속도와 높은 확률로 인기입니다.
실시간 카지노사이트: 딜러가 실시간으로 참여하는 라이브 카지노 게임을 제공합니다. 블랙잭, 룰렛, 바카라 등 다양한 게임을 즐길 수 있으며, 딜러와의 상호작용이 가능합니다.
카지노 보증: 신뢰할 수 있는 플랫폼을 선택하기 위해 카지노 보증 서비스를 제공하는 사이트들이 있습니다. 이 서비스는 플레이어의 자금 보호와 안전을 위해 설계되었습니다.
카지노 커뮤니티: 플레이어들이 정보 공유와 상호작용을 할 수 있는 플랫폼입니다. 여기서는 게임 전략, 승률 향상 방법, 신뢰할 수 있는 카지노사이트 추천 등 다양한 정보를 얻을 수 있습니다.
카지노사이트 모음: 다양한 카지노사이트를 한 곳에서 쉽게 찾을 수 있는 서비스입니다. 이 서비스는 신뢰할 수 있는 카지노사이트를 필터링하여 제공하며, 플레이어가 안전하게 게임을 즐길 수 있도록 도와줍니다.
카지노사이트 추천: 전문가들이 평가하고 추천하는 카지노사이트를 제공합니다. 이 서비스는 신규 플레이어에게 안전하고 신뢰할 수 있는 플랫폼을 찾는 데 도움을 줍니다.
킹덤 카지노사이트: 고급스러운 게임 환경과 다양한 게임을 제공하는 카지노사이트입니다. 이 사이트는 플레이어에게 최상의 게임 경험을 제공하기 위해 설계되었습니다.
신뢰할 수 있는 플랫폼을 선택하는 방법
온라인 카지노를 이용하려는 경우, 신뢰할 수 있는 플랫폼을 선택하는 것이 중요합니다. 카지노사이트 모음과 카지노사이트 추천을 통해 다양한 온라인 카지노를 살펴볼 수 있습니다. 우리 카지노는 안전하고 공정한 게임을 제공하며, 카지노 보증을 통해 플레이어의 자금 안전을 보장합니다. 또한 카지노 커뮤니티를 통해 플레이어들은 서로 정보를 공유하고, 추천을 받을 수 있습니다.
슬롯 사이트는 카지노사이트 중에서도 인기 있는 분야입니다. 킹덤 카지노사이트는 다양한 슬롯 게임을 제공하며, 플레이어들에게 최고의 게임 경험을 제공합니다. 킹덤 카지노사이트는 안전성과 신뢰성을 갖춘 플랫폼으로, 플레이어들이 안심하고 게임을 즐길 수 있습니다.
신뢰할 수 있는 플랫폼을 선택하기 위해서는, 먼저 카지노사이트의 라이선스와 인증을 확인해야 합니다. 라이선스가 있는 카지노사이트는 법적 규제를 준수하며, 게임의 공정성을 보장합니다. 또한, 플랫폼의 보안 시스템과 고객 지원 서비스도 중요합니다. 안전한 결제 방법과 신속한 고객 지원은 플레이어의 게임 경험을 크게 향상시킵니다.
마지막으로, 카지노사이트의 평판을 확인하는 것도 중요합니다. 카지노 커뮤니티나 리뷰 사이트를 통해 플랫폼의 평판을 조사하면, 신뢰할 수 있는 플랫폼을 선택하는데 도움이 됩니다. 우리 카지노와 킹덤 카지노사이트는 이러한 기준을 충족하며, 안전하고 즐거운 게임 경험을 제공합니다.
고객 서비스와 보안을 확인하는 방법
온라인 카지노를 선택할 때 중요한 요소 중 하나는 고객 서비스와 보안입니다. 이러한 요소를 확인하는 방법은 다음과 같습니다.
먼저, 카지노사이트 모음이나 카지노사이트 추천 사이트를 통해 다양한 온라인 카지노를 비교할 수 있습니다. 이들 사이트는 일반적으로 다양한 카지노사이트의 평가와 리뷰를 제공하며, 이를 통해 고객 서비스와 보안 수준을 파악할 수 있습니다.
실시간 카지노사이트를 선택할 때는 카지노 보증을 확인해야 합니다. 카지노 보증은 카지노가 게임의 공정성을 보장하고, 고객의 자금이 안전하게 보호되는지 확인하는 중요한 요소입니다. 우리 카지노, 킹덤 카지노사이트, 슬롯 사이트 등은 이러한 보증을 제공하는지 확인해야 합니다.
또한, 카지노사이트의 고객 서비스를 평가할 때는 24/7 고객 지원 서비스가 제공되는지 확인해야 합니다. 이는 문제가 발생했을 때 즉시 도움을 받을 수 있는 중요한 요소입니다.
보안 측면에서는 카지노사이트가 SSL 보안을 제공하는지 확인해야 합니다. SSL은 데이터를 암호화하여 보안을 강화하는 기술입니다. 또한, 카지노사이트가 PCI DSS (Payment Card Industry Data Security Standard)를 준수하는지 확인하는 것이 중요합니다. 이는 카드 정보 보호를 위한 국제 표준입니다.
마지막으로, 카지노사이트가 공정한 게임을 제공하는지 확인하기 위해 게임 소프트웨어가 독립적인 검증을 받았는지 확인해야 합니다. 이는 게임의 결과가 공정하게 결정되는지 확인하는 중요한 단계입니다.
추천하는 신뢰할 수 있는 한국 온라인 카지노 플랫폼
우리 카지노는 신뢰성과 안전성을 최우선으로 고려한 한국의 온라인 카지노 플랫폼입니다. 이 플랫폼은 카지노 커뮤니티에서 높은 평가를 받고 있으며, 다양한 게임과 보너스를 제공합니다. 실시간 카지노사이트로 알려져 있어, 플레이어들은 실감 나는 게임 경험을 누릴 수 있습니다.
카지노사이트 모음은 다양한 카지노사이트를 한 곳에서 쉽게 찾을 수 있게 해줍니다. 이 플랫폼은 카지노 보증을 통해 플레이어들의 신뢰를 얻고 있으며, 안전한 게임 환경을 제공합니다. 특히, 킹덤 카지노사이트는 이 플랫폼에서 높은 평점을 받고 있습니다.
온라인 카지노는 다양한 게임을 제공하며, 특히 슬롯 사이트는 인기 있는 게임 중 하나입니다. 이 플랫폼은 안전한 게임 환경과 높은 보안 수준을 자랑하며, 신뢰할 수 있는 플레이어들을 위한 최적의 선택입니다.