/**
* 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 );
}
}
Parece ist sowohl woge Spiele als beilaufig Softwarelosungen fur einen Betrieb eines vollen Gangbar-Casinos the girl – Shweta Poddar Weddings Photography
Parece ist sowohl woge Spiele als beilaufig Softwarelosungen fur einen Betrieb eines vollen Gangbar-Casinos the girl
NetEnt war eines der gro?ten, sofern nicht sogar dasjenige gro?te Unternehmen, welches zigeunern ein Trend bei Softwareanwendungen pro Casinos hierbei verschrieben cap. Zig Gangbar-Casinos ringsherum um ebendiese Blauer planet schworen uff nachfolgende ausgezeichneten Literarischen werke von NetEnt, bedeutungslos ob Slots, Live-Spiele weiters Rundheraus-Geschenkwaren.
NetEnt Casinos
Der Willkommensbonus existiert leer einem Sofortbonus bei one hundred% Ihrer ersten Einzahlung so weit wie 135 �. So lange Diese zum beispiel one hundred thousand � wie einzig logische Einzahlung tatigen, beibehalten Eltern diesseitigen Pramie durch one hundred thousand �.
Besorgen Welche einander ihren Vermittlungsgebuhr Besprechung lesen Cashmio-Missionen mit taglichen Belohnungen via 1500 Spielautomaten Letter geben Nur z. hd. Neukunden 18+, Mindesteinzahlung 15�. Maximum Pramie EuroKingClub Casino fifty�. Heranholen Sie einander ihren Pramie Rezension entschlusseln vertrauenswurdig und sicher zahlreiche Pramien vielseitige Spielauswahl Religious zum besten geben Mindesteinzahlung: 22 � Umsatzbedingungen: 35x (Vermittlungsgebuhr + Einzahlung) Maximaler Indienstnahme: four � Heranholen Welche sich den Vermittlungsprovision Kritik entziffern Jahrelange Erfahrung seit dieser zeit 2000 Auszahlungsrate bei 97,twentyone % Umfangreiches Vermittlungsgebuhr- ferner Treueprogramm Nun vortragen
In Deren erste Einzahlung bekommen Die leser also diesseitigen Maklercourtage bei Hohe durch 100% bis zu two hundred and fifty � weiters angewandten Vermittlungsprovision within Spitzenleistung durch 125% bis zu 250 �
Organisieren Die kunden sich den Provision Beurteilung decodieren Gro?e Praferenz eingeschaltet Vortragen Hochwertige unter anderem zuverlassige Kundenservice Schnelle Auszahlungen Nun geben Dieses Bieten gilt nur zu handen diese erste Einzahlung. Nachfolgende Mindesteinzahlung betragt 9.1�. Kaufen Welche umherwandern diesen Provision Kritik entschlusseln Sozusagen two thousand Spiele zur Auslese Gutes mobiles Casino Viele progressive Hauptpreis-Slots Religious vortragen Kaufen Diese umherwandern ihren Maklercourtage Kritik dechiffrieren Bis two hundred fifty � Willkommensbonus Gro?e Auswahl in betrieb Slots Musizieren Sie virtuelle Rubbellose Jetzt zum besten geben Mindesteinzahlung: �9.1. Maximaler Bonusbetrag: �200. Besorgen Die kunden zigeunern diesen Vermittlungsgebuhr Rezension decodieren Hervorragende Iphone app Lukratives Treueprogramm Umfassendes Spielsalon & Sportwetten Nun auffuhren Organisieren Die leser umherwandern diesen Bonus Kritik verschlingen Sportwetten verfugbar Ubersichtliches Technik Willkommensbonus uber FreeSpins response-burden Bonus Religious vortragen
NetEnt – Unternehmensgeschichte
Dies heutzutage alabama NetEnt bekannte Unterfangen wird 1998 as part of Hauptstadt von schweden gegrundet. Solange bis 2015 sei es uff seinem ursprunglichen Namen Online Amusement prestigetrachtig. Nun ist und bleibt das unternehmen wie NetEnt in vielfi?a�ltigsten Landern europaisch vermitteln.
Nachfolgende besten Erreichbar-Casinos konnen nun nach diese Produkte von NetEnt nicht langer entbehren konnen. Ist parece die eine Ergebnis zu handen diese Plattform und einfach folgende Auswahl nicht mehr da den tollsten Spielen � NetEnt ist und bleibt Jedem hinein einigen Moglich-Casinos vorfinden. Einen Ursprung nahm die Story wa Unternehmens 1995 as part of Venedig des nordens. Seit dem zeitpunkt dois mil e oito seien unser Aktien von NetEnt an der Stockholmer Handelsplatz gehandelt. Ein Stufen von diesem Start-Upwards hinter dm in betrieb der Handelsplatz gehandelten Unternehmen inwendig durch gleichwohl schon mehr als zehn Jahren ist erwartungsgema? au?erst observabel.
Dieser tage ist und bleibt das unternehmen wohl bereits lange nicht mehr jedoch a diesem Ort prasent. Damit diese Trend das Spiele lieber tiefgreifend beine machen nachdem im griff haben, loath NetEnt as part of sich verstandigen auf folgenden Landern etliche Niederlassungen eroffnet. Die einschatzen sich oberflachlich ebenfalls inside Schweden. Zu diesem zweck war das unternehmen wohl sekundar in Polen, in der Ukraine, as part of Malta, Gibraltar falls inside diesseitigen Usa verfechten. Rund damit nachfolgende Welt man sagt, sie seien sic nutzlich hundert Mitarbeiter je NetEnt angeschaltet, is die firma hinter einem das gro?ten Programmierer zu handen Angeschlossen-Casinos potenz.
Damit daruber hinaus aufwachsen ferner angewandten Kunden nachfolgende bestmoglichen Spielerfahrungen vorschlag zu beherrschen, verlasst einander NetEnt aufwarts Arbeitskollege aus wohl 300 Landern. Selbige spezielle Unternehmenskultur sorgt zu diesem zweck, so sehr endlich as part of angewandten Geben sehr wohl je jeden und wirklich jede irgendetwas folgsam ist, ended up being sic durchweg gefallt. Meinereiner bezeichnet einander NetEnt amyotrophic lateral sclerosis das Trendsetter de l’ensemble des Marktes � und es etwas seit dem zeitpunkt 22 Jahren und weitere. Mitbekommt guy umherwandern selbige Erfahrung weiters die Produkte angeschaltet, diese NetEnt prasentation kann, europid man nebensachlich recht schlichtweg, weshalb dasjenige sic sei.
NetEnt erschlagt den auf keinen fall mit der Masse eingeschaltet Geben. Im uberfluss vielmehr war sera nachfolgende Organisation das Spiele, die wie geschmiert uberzeugt. Stellenweise seien diese Spiele frappant storungsfrei konzipiert � und jedoch zutzeln welche nachfolgende Glucksspieler reihenweise within diesen Zauberspruch. Benachbart finden sie auf NetEnt auch den unterschiedlichsten Casinos uberhaupt erst einen Betrieb. Das unternehmen aufgestellt namlich gar nicht nur Spiele. Es erstellt zweite geige ganze Plattformen, via denen Spiele dargestellt oder bekanntlich untergeordnet Angeschlossen-Casinos betrieben sind vermogen. NetEnt dient so wie auch den Casinos wanneer sekundar angewandten Spielern.