/** * 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 ); } } IWin Vit Nam nn tng gii tr trc tuyn.4504 – Shweta Poddar Weddings Photography

IWin Việt Nam – nền tảng giải trí trực tuyến

IWin.net là một trong những nền tảng giải trí trực tuyến hàng đầu tại Việt Nam, cung cấp cho người chơi một trải nghiệm cá cược và giải trí đa dạng, an toàn và tiện lợi. Với giao diện thân thiện và dễ sử dụng, IWin.net đã trở thành lựa chọn hàng đầu của nhiều người chơi.

Nếu bạn đang tìm kiếm một ứng dụng cá cược trực tuyến đáng tin cậy, IWin app là lựa chọn hoàn hảo. Ứng dụng này cho phép người dùng tải và sử dụng trên điện thoại di động, mang đến sự tiện lợi và linh hoạt trong việc tham gia các trò chơi và cá cược.

Để bắt đầu trải nghiệm giải trí trực tuyến với IWin, bạn chỉ cần truy cập IWin.net hoặc tải ứng dụng IWin app trên điện thoại của mình. Với nhiều trò chơi hấp dẫn và cơ hội chiến thắng lớn, IWin.net hứa hẹn mang lại cho bạn những giờ phút giải trí tuyệt vời.

IWin Việt Nam: Nền tảng giải trí trực tuyến

IWin Việt Nam là một trong những nền tảng giải trí trực tuyến hàng đầu tại Việt Nam. Website chính của họ là iwin club và iwin net, nơi cung cấp cho người chơi một loạt các trò chơi cá cược và giải trí đa dạng. Để tham gia, bạn có thể truy cập trực tiếp vào trang web hoặc tải ứng dụng iwin để trải nghiệm trên điện thoại di động.

Tải iwin cho điện thoại di động là cách thuận tiện nhất để chơi bất cứ khi nào bạn muốn. Ứng dụng cung cấp giao diện dễ sử dụng và tương thích với nhiều loại thiết bị, đảm bảo trải nghiệm chơi game mượt mà và an toàn.

Đa dạng trò chơi

IWin Việt Nam cung cấp một loạt các trò chơi cá cược và giải trí, bao gồm:

Loại trò chơi
Mô tả

Cá cược thể thao Trò chơi cá cược trên các môn thể thao phổ biến như bóng đá, bóng rổ, bóng chày, v.v. Cá cược casino Trò chơi như xì dách, sicbo, roulette, slot machine, v.v. Trò chơi may mắn Trò chơi như xổ số, lô đề, v.v.

Đảm bảo rằng bạn tuân thủ các quy định và luật pháp địa phương khi tham gia các trò chơi tại IWin Việt Nam.

Hệ thống trò chơi đa dạng

IWin Việt Nam cung cấp hệ thống trò chơi đa dạng, thu hút người chơi từ khắp nơi. Từ iwin net, iwin đến iwin club, mỗi trò chơi đều mang đến trải nghiệm độc đáo và thú vị. Người chơi có thể tải iwin để trải nghiệm ngay trên thiết bị di động của mình.

Trò chơi tại IWin Việt Nam bao gồm nhiều thể loại như casino trực tuyến, slot machine, poker, baccarat, roulette và nhiều trò chơi khác. Mỗi trò chơi đều được thiết kế với giao diện đẹp mắt, dễ sử dụng và có nhiều mức cược khác nhau để phù hợp với nhu cầu của người chơi.

Hệ thống trò chơi đa dạng của IWin Việt Nam không chỉ mang lại niềm vui và sự giải trí, mà còn giúp người chơi có nhiều lựa chọn để khám phá và thử thách bản thân. Tải iwin ngay hôm nay để trải nghiệm thế giới giải trí trực tuyến phong phú và hấp dẫn!

Đăng ký và tham gia dễ dàng

Tải iwin, iwin net, iwin club, iwin và bắt đầu trải nghiệm ngay hôm nay. Quá trình đăng ký đơn giản chỉ trong vài bước:

1. Truy cập trang web chính thức của iwin.

2. Bấm vào nút “Đăng ký” ở góc trên bên phải.

3. Điền đầy đủ thông tin cá nhân theo yêu cầu.

4. Xác nhận thông tin và bấm “Đăng ký”.

Sau khi hoàn thành, bạn sẽ nhận được một email xác nhận. Kiểm tra email và xác nhận tài khoản để bắt đầu chơi ngay.

Tham gia iwin, iwin net, iwin club, iwin không yêu cầu bất kỳ thông tin cá nhân nào khác ngoài những gì cần thiết để tạo tài khoản. Chúng tôi cam kết bảo mật thông tin của bạn.

Chúc bạn có những giờ phút giải trí tuyệt vời tại iwin!

Khuyến mãi và ưu đãi hấp dẫn

IWin Việt Nam cung cấp nhiều chương trình khuyến mãi và ưu đãi hấp dẫn cho người chơi. Khi tải iwin, iwin club hoặc iwin app, bạn sẽ nhận được các ưu đãi sau:

  • Khuyến mãi chào mừng: Khi đăng ký tài khoản mới, bạn sẽ nhận được ưu đãi 100% giá trị nạp đầu tiên lên đến 500.000 VND.

  • Khuyến mãi hàng ngày: Mỗi ngày, bạn có cơ hội nhận thưởng từ 50.000 VND đến 200.000 VND chỉ cần đăng nhập vào ứng dụng.

  • Khuyến mãi nạp tiền: Khi nạp tiền vào tài khoản, bạn sẽ nhận được phần thưởng theo tỷ lệ nạp, tối đa 100%.

  • Khuyến mãi sự kiện: IWin thường xuyên tổ chức các sự kiện đặc biệt, mang lại cơ hội nhận thưởng lớn cho người chơi.

  • Khuyến mãi VIP: Đối với người chơi VIP, IWin cung cấp nhiều ưu đãi đặc biệt như giảm giá, ưu tiên trong các sự kiện và nhiều hơn nữa.

Ngoài ra, IWin Việt Nam còn có chính sách hoàn tiền và hoàn trả cho người chơi, đảm bảo quyền lợi tối đa cho khách hàng.

Chuyển nghiệp với hỗ trợ khách hàng IWin Việt Nam

IWin Việt Nam cung cấp hỗ trợ khách hàng chuyên nghiệp 24/7 để giúp người chơi chuyển nghiệp một cách suôn sẻ. Đội ngũ tư vấn viên giàu kinh nghiệm sẵn sàng giải đáp mọi thắc mắc về game, hướng dẫn cách tải iwin net, iwin club và iwin một cách chi tiết. Khách hàng có thể liên hệ qua hotline, email hoặc chat trực tuyến bất cứ lúc nào.

Chúng tôi cam kết hỗ trợ nhanh chóng và hiệu quả, giúp người chơi tận hưởng trọn vẹn trải nghiệm giải trí trực tuyến. Với dịch vụ hỗ trợ khách hàng chất lượng, IWin Việt Nam luôn sẵn sàng đồng hành cùng bạn trên mọi hành trình chơi game.

Uncategorized