$args wp_remote_request() arguments to add or override. * @return array{status: int, headers: array, body: string, error: string} */ public function request( string $method, string $url, array $args = array() ): array { $own_host = wp_parse_url( home_url(), PHP_URL_HOST ); $is_local = is_string( $own_host ) && wp_parse_url( $url, PHP_URL_HOST ) === $own_host; $args = array_merge( array( 'method' => $method, 'timeout' => self::TIMEOUT, 'redirection' => 0, 'user-agent' => 'Forensix Digital/' . ( defined( 'FORENSIX_VERSION' ) ? FORENSIX_VERSION : 'dev' ) . '; ' . home_url( '/' ), 'limit_response_size' => self::MAX_BODY, // Same rule as WordPress core loopback requests: local certificates are often self-signed. 'sslverify' => $is_local ? (bool) apply_filters( 'https_local_ssl_verify', false ) : true, // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Core filter. ), $args ); /** * Filters the arguments of every outbound Forensix request. Return false to block it. * * @param array|false $args Request arguments. * @param string $url URL. */ $args = apply_filters( 'forensix_http_request_args', $args, $url ); if ( ! is_array( $args ) ) { return array( 'status' => 0, 'headers' => array(), 'body' => '', 'error' => 'blocked', ); } $response = wp_remote_request( $url, $args ); if ( is_wp_error( $response ) ) { return array( 'status' => 0, 'headers' => array(), 'body' => '', 'error' => $response->get_error_message(), ); } $headers = array(); foreach ( wp_remote_retrieve_headers( $response ) as $name => $value ) { $headers[ strtolower( (string) $name ) ] = is_array( $value ) ? (string) end( $value ) : (string) $value; } return array( 'status' => (int) wp_remote_retrieve_response_code( $response ), 'headers' => $headers, 'body' => (string) wp_remote_retrieve_body( $response ), 'error' => '', ); } }