wppaste
WordPress

WP_Http_Curl::request( string $url, string|array $args = array() ): array|WP_Error

Since
2.7.0
Source
wp-includes/class-wp-http-curl.php:73
Send a HTTP request to a URI using cURL extension.

Parameters

$urlstring
The request URL.
$argsstring|arrayoptional
Override the defaults.Default: array()

Return

array|WP_Error
Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error

Hooks fired · 3

3 hooks fire while WP_Http_Curl::request() runs, in this order:

  1. apply_filters( https_local_ssl_verify )filterline 122 (+49 into the body)

    Filters whether SSL should be verified for local HTTP API requests.

  2. apply_filters( https_ssl_verify )filterline 125 (+52 into the body)

    Filters whether SSL should be verified for non-local requests.

  3. do_action( http_api_curl )actionline 236 (+163 into the body)

    Fires before the cURL request is executed.

Uses · 11

Source

	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 );

History

Introduced in 2.7.0. Unchanged from 6.7.7 through 7.1.0.

  1. 6.7.7
  2. 6.8.8
  3. 6.9.7
  4. 7.0.4
  5. 7.1.0

Signature, return type and hooks compared across 5 parsed releases.

About this page

Parsed data
Generated from the wordpress-develop 7.0.4 tag, from src/wp-includes/class-wp-http-curl.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.
Corrections
Something wrong on this page? Report it and it gets fixed in the next regeneration.