Nama File / Folder
Size
Action
ID3
--
NONE
IXR
--
NONE
PHPMailer
--
NONE
Requests
--
NONE
SimplePie
--
NONE
Text
--
NONE
abilities-api
--
NONE
assets
--
NONE
block-bindings
--
NONE
block-patterns
--
NONE
block-supports
--
NONE
blocks
--
NONE
certificates
--
NONE
css
--
NONE
customize
--
NONE
fonts
--
NONE
html-api
--
NONE
images
--
NONE
interactivity-api
--
NONE
js
--
NONE
l10n
--
NONE
php-compat
--
NONE
pomo
--
NONE
rest-api
--
NONE
sitemaps
--
NONE
sodium_compat
--
NONE
style-engine
--
NONE
theme-compat
--
NONE
widgets
--
NONE
222.php
15.759KB
Hapus
Edit
Rename
abilities-api.php
23.798KB
Hapus
Edit
Rename
abilities.php
7.796KB
Hapus
Edit
Rename
admin-bar.php
36.1KB
Hapus
Edit
Rename
adminfuns.php
5.954KB
Hapus
Edit
Rename
author-template.php
18.937KB
Hapus
Edit
Rename
block-editor.php
28.596KB
Hapus
Edit
Rename
block-i18n.json
0.309KB
Hapus
Edit
Rename
block-patterns.php
12.903KB
Hapus
Edit
Rename
block-template.php
14.999KB
Hapus
Edit
Rename
bookmark-template.php
12.469KB
Hapus
Edit
Rename
cache.php
13.17KB
Hapus
Edit
Rename
canonical.php
33.833KB
Hapus
Edit
Rename
capabilities.php
42.629KB
Hapus
Edit
Rename
category-template.php
55.708KB
Hapus
Edit
Rename
class-avif-info.php
28.921KB
Hapus
Edit
Rename
class-feed.php
0.526KB
Hapus
Edit
Rename
class-http.php
0.358KB
Hapus
Edit
Rename
class-json.php
42.652KB
Hapus
Edit
Rename
class-oembed.php
0.392KB
Hapus
Edit
Rename
class-phpass.php
6.612KB
Hapus
Edit
Rename
class-phpmailer.php
0.648KB
Hapus
Edit
Rename
class-pop3.php
20.626KB
Hapus
Edit
Rename
class-simplepie.php
0.442KB
Hapus
Edit
Rename
class-smtp.php
0.446KB
Hapus
Edit
Rename
class-snoopy.php
36.831KB
Hapus
Edit
Rename
class-walker-category-dropdown.php
2.411KB
Hapus
Edit
Rename
class-walker-category.php
8.278KB
Hapus
Edit
Rename
class-walker-nav-menu.php
11.762KB
Hapus
Edit
Rename
class-walker-page-dropdown.php
2.646KB
Hapus
Edit
Rename
class-walker-page.php
7.434KB
Hapus
Edit
Rename
class-wp-admin-bar.php
17.455KB
Hapus
Edit
Rename
class-wp-ajax-response.php
5.143KB
Hapus
Edit
Rename
class-wp-application-passwords.php
16.698KB
Hapus
Edit
Rename
class-wp-block-bindings-registry.php
8.283KB
Hapus
Edit
Rename
class-wp-block-bindings-source.php
2.922KB
Hapus
Edit
Rename
class-wp-block-editor-context.php
1.318KB
Hapus
Edit
Rename
class-wp-block-list.php
4.603KB
Hapus
Edit
Rename
class-wp-block-metadata-registry.php
11.616KB
Hapus
Edit
Rename
class-wp-block-parser-block.php
2.495KB
Hapus
Edit
Rename
class-wp-block-parser-frame.php
1.97KB
Hapus
Edit
Rename
class-wp-block-parser.php
11.246KB
Hapus
Edit
Rename
class-wp-block-pattern-categories-registry.php
5.322KB
Hapus
Edit
Rename
class-wp-block-patterns-registry.php
10.989KB
Hapus
Edit
Rename
class-wp-block-processor.php
68.319KB
Hapus
Edit
Rename
class-wp-block-styles-registry.php
6.345KB
Hapus
Edit
Rename
class-wp-block-template.php
1.985KB
Hapus
Edit
Rename
class-wp-block-templates-registry.php
7.024KB
Hapus
Edit
Rename
class-wp-block-type-registry.php
4.912KB
Hapus
Edit
Rename
class-wp-block-type.php
16.86KB
Hapus
Edit
Rename
class-wp-block.php
24.23KB
Hapus
Edit
Rename
class-wp-classic-to-block-menu-converter.php
3.975KB
Hapus
Edit
Rename
class-wp-comment-query.php
47.66KB
Hapus
Edit
Rename
class-wp-customize-control.php
25.507KB
Hapus
Edit
Rename
class-wp-customize-manager.php
198.378KB
Hapus
Edit
Rename
class-wp-customize-nav-menus.php
56.653KB
Hapus
Edit
Rename
class-wp-customize-panel.php
10.459KB
Hapus
Edit
Rename
class-wp-customize-section.php
10.946KB
Hapus
Edit
Rename
class-wp-customize-setting.php
29.26KB
Hapus
Edit
Rename
class-wp-customize-widgets.php
70.905KB
Hapus
Edit
Rename
class-wp-date-query.php
35.3KB
Hapus
Edit
Rename
class-wp-dependencies.php
16.605KB
Hapus
Edit
Rename
class-wp-dependency.php
2.571KB
Hapus
Edit
Rename
class-wp-editor.php
70.64KB
Hapus
Edit
Rename
class-wp-embed.php
15.558KB
Hapus
Edit
Rename
class-wp-error.php
7.326KB
Hapus
Edit
Rename
class-wp-exception.php
0.247KB
Hapus
Edit
Rename
class-wp-fatal-error-handler.php
7.959KB
Hapus
Edit
Rename
class-wp-feed-cache-transient.php
3.227KB
Hapus
Edit
Rename
class-wp-feed-cache.php
0.946KB
Hapus
Edit
Rename
class-wp-hook.php
16.283KB
Hapus
Edit
Rename
class-wp-http-cookie.php
7.216KB
Hapus
Edit
Rename
class-wp-http-curl.php
12.95KB
Hapus
Edit
Rename
class-wp-http-encoding.php
6.532KB
Hapus
Edit
Rename
class-wp-http-ixr-client.php
3.424KB
Hapus
Edit
Rename
class-wp-http-proxy.php
5.84KB
Hapus
Edit
Rename
class-wp-http-requests-hooks.php
1.975KB
Hapus
Edit
Rename
class-wp-http-requests-response.php
4.297KB
Hapus
Edit
Rename
class-wp-http-response.php
2.907KB
Hapus
Edit
Rename
class-wp-http-streams.php
16.464KB
Hapus
Edit
Rename
class-wp-image-editor-gd.php
20.22KB
Hapus
Edit
Rename
class-wp-image-editor-imagick.php
36.11KB
Hapus
Edit
Rename
class-wp-image-editor.php
17.007KB
Hapus
Edit
Rename
class-wp-list-util.php
7.269KB
Hapus
Edit
Rename
class-wp-locale-switcher.php
6.617KB
Hapus
Edit
Rename
class-wp-locale.php
16.487KB
Hapus
Edit
Rename
class-wp-matchesmapregex.php
1.785KB
Hapus
Edit
Rename
class-wp-meta-query.php
29.817KB
Hapus
Edit
Rename
class-wp-metadata-lazyloader.php
6.673KB
Hapus
Edit
Rename
class-wp-navigation-fallback.php
8.978KB
Hapus
Edit
Rename
class-wp-network-query.php
19.421KB
Hapus
Edit
Rename
class-wp-network.php
12.008KB
Hapus
Edit
Rename
class-wp-object-cache.php
17.113KB
Hapus
Edit
Rename
class-wp-oembed-controller.php
6.743KB
Hapus
Edit
Rename
class-wp-oembed.php
30.928KB
Hapus
Edit
Rename
class-wp-paused-extensions-storage.php
4.991KB
Hapus
Edit
Rename
class-wp-phpmailer.php
4.246KB
Hapus
Edit
Rename
class-wp-plugin-dependencies.php
24.722KB
Hapus
Edit
Rename
class-wp-post-type.php
29.961KB
Hapus
Edit
Rename
class-wp-post.php
6.339KB
Hapus
Edit
Rename
class-wp-recovery-mode-cookie-service.php
6.716KB
Hapus
Edit
Rename
class-wp-recovery-mode-email-service.php
10.921KB
Hapus
Edit
Rename
class-wp-recovery-mode-key-service.php
4.77KB
Hapus
Edit
Rename
class-wp-recovery-mode-link-service.php
3.382KB
Hapus
Edit
Rename
class-wp-recovery-mode.php
11.185KB
Hapus
Edit
Rename
class-wp-rewrite.php
62.194KB
Hapus
Edit
Rename
class-wp-role.php
2.464KB
Hapus
Edit
Rename
class-wp-script-modules.php
32.146KB
Hapus
Edit
Rename
class-wp-scripts.php
34.047KB
Hapus
Edit
Rename
class-wp-session-tokens.php
7.147KB
Hapus
Edit
Rename
class-wp-simplepie-file.php
3.469KB
Hapus
Edit
Rename
class-wp-simplepie-sanitize-kses.php
1.865KB
Hapus
Edit
Rename
class-wp-site-query.php
30.913KB
Hapus
Edit
Rename
class-wp-site.php
7.292KB
Hapus
Edit
Rename
class-wp-speculation-rules.php
7.351KB
Hapus
Edit
Rename
class-wp-styles.php
12.542KB
Hapus
Edit
Rename
class-wp-tax-query.php
19.118KB
Hapus
Edit
Rename
class-wp-taxonomy.php
18.124KB
Hapus
Edit
Rename
class-wp-term-query.php
39.993KB
Hapus
Edit
Rename
class-wp-text-diff-renderer-inline.php
0.956KB
Hapus
Edit
Rename
class-wp-text-diff-renderer-table.php
18.438KB
Hapus
Edit
Rename
class-wp-textdomain-registry.php
10.235KB
Hapus
Edit
Rename
class-wp-theme-json-data.php
1.767KB
Hapus
Edit
Rename
class-wp-theme-json-resolver.php
34.9KB
Hapus
Edit
Rename
class-wp-theme-json-schema.php
7.194KB
Hapus
Edit
Rename
class-wp-theme-json.php
160.495KB
Hapus
Edit
Rename
class-wp-theme.php
64.268KB
Hapus
Edit
Rename
class-wp-token-map.php
27.947KB
Hapus
Edit
Rename
class-wp-url-pattern-prefixer.php
4.689KB
Hapus
Edit
Rename
class-wp-user-meta-session-tokens.php
2.94KB
Hapus
Edit
Rename
class-wp-user-query.php
43.131KB
Hapus
Edit
Rename
class-wp-user-request.php
2.251KB
Hapus
Edit
Rename
class-wp-widget-factory.php
3.269KB
Hapus
Edit
Rename
class-wp-xmlrpc-server.php
210.397KB
Hapus
Edit
Rename
class-wp.php
25.86KB
Hapus
Edit
Rename
class-wpdb.php
115.847KB
Hapus
Edit
Rename
class.wp-scripts.php
0.335KB
Hapus
Edit
Rename
class.wp-styles.php
0.33KB
Hapus
Edit
Rename
comment.php
130.927KB
Hapus
Edit
Rename
compat-utf8.php
19.096KB
Hapus
Edit
Rename
compat.php
17.412KB
Hapus
Edit
Rename
cron.php
41.98KB
Hapus
Edit
Rename
date.php
0.391KB
Hapus
Edit
Rename
default-filters.php
37.021KB
Hapus
Edit
Rename
default-widgets.php
2.241KB
Hapus
Edit
Rename
embed.php
37.999KB
Hapus
Edit
Rename
feed-atom-comments.php
5.375KB
Hapus
Edit
Rename
feed-atom.php
3.048KB
Hapus
Edit
Rename
feed-rdf.php
2.605KB
Hapus
Edit
Rename
feed-rss.php
1.161KB
Hapus
Edit
Rename
feed-rss2-comments.php
4.039KB
Hapus
Edit
Rename
feed-rss2.php
3.71KB
Hapus
Edit
Rename
feed.php
24.599KB
Hapus
Edit
Rename
fonts.php
9.561KB
Hapus
Edit
Rename
formatting.php
346.427KB
Hapus
Edit
Rename
functions.php
281.836KB
Hapus
Edit
Rename
functions.wp-scripts.php
14.952KB
Hapus
Edit
Rename
functions.wp-styles.php
8.438KB
Hapus
Edit
Rename
global-styles-and-settings.php
20.707KB
Hapus
Edit
Rename
http.php
25.271KB
Hapus
Edit
Rename
kses.php
81.731KB
Hapus
Edit
Rename
l10n.php
67.185KB
Hapus
Edit
Rename
link-template.php
156.364KB
Hapus
Edit
Rename
load.php
55.186KB
Hapus
Edit
Rename
locale.php
0.158KB
Hapus
Edit
Rename
media-template.php
61.716KB
Hapus
Edit
Rename
media.php
216.062KB
Hapus
Edit
Rename
meta.php
64.996KB
Hapus
Edit
Rename
ms-default-constants.php
4.806KB
Hapus
Edit
Rename
ms-default-filters.php
6.48KB
Hapus
Edit
Rename
ms-deprecated.php
21.249KB
Hapus
Edit
Rename
ms-functions.php
89.689KB
Hapus
Edit
Rename
ms-load.php
19.421KB
Hapus
Edit
Rename
ms-network.php
3.693KB
Hapus
Edit
Rename
ms-settings.php
4.105KB
Hapus
Edit
Rename
ms-site.php
40.739KB
Hapus
Edit
Rename
nav-menu-template.php
25.381KB
Hapus
Edit
Rename
nav-menu.php
43.308KB
Hapus
Edit
Rename
plugin.php
35.646KB
Hapus
Edit
Rename
post-formats.php
6.936KB
Hapus
Edit
Rename
post-template.php
67.039KB
Hapus
Edit
Rename
post-thumbnail-template.php
10.624KB
Hapus
Edit
Rename
post.php
289.133KB
Hapus
Edit
Rename
query.php
36.226KB
Hapus
Edit
Rename
registration-functions.php
0.195KB
Hapus
Edit
Rename
registration.php
0.195KB
Hapus
Edit
Rename
rest-api.php
98.295KB
Hapus
Edit
Rename
revision.php
30.021KB
Hapus
Edit
Rename
rewrite.php
19.033KB
Hapus
Edit
Rename
robots-template.php
5.063KB
Hapus
Edit
Rename
rss-functions.php
0.249KB
Hapus
Edit
Rename
rss.php
22.659KB
Hapus
Edit
Rename
script-loader.php
154.633KB
Hapus
Edit
Rename
script-modules.php
9.679KB
Hapus
Edit
Rename
session.php
0.252KB
Hapus
Edit
Rename
sitemaps.php
3.162KB
Hapus
Edit
Rename
speculative-loading.php
8.398KB
Hapus
Edit
Rename
style-engine.php
7.386KB
Hapus
Edit
Rename
taxonomy.php
172.908KB
Hapus
Edit
Rename
template-canvas.php
0.531KB
Hapus
Edit
Rename
theme-i18n.json
1.689KB
Hapus
Edit
Rename
theme-previews.php
2.842KB
Hapus
Edit
Rename
theme-templates.php
6.092KB
Hapus
Edit
Rename
theme.json
8.712KB
Hapus
Edit
Rename
theme.php
131.844KB
Hapus
Edit
Rename
update.php
37.454KB
Hapus
Edit
Rename
user.php
173.889KB
Hapus
Edit
Rename
utf8.php
7.09KB
Hapus
Edit
Rename
vars.php
6.408KB
Hapus
Edit
Rename
version.php
1.08KB
Hapus
Edit
Rename
widgets.php
69.462KB
Hapus
Edit
Rename
wp-db.php
0.435KB
Hapus
Edit
Rename
<?php /** * Core HTTP Request API * * Standardizes the HTTP requests for WordPress. Handles cookies, gzip encoding and decoding, chunk * decoding, if HTTP 1.1 and various other difficult HTTP protocol implementations. * * @package WordPress * @subpackage HTTP */ /** * Returns the initialized WP_Http Object * * @since 2.7.0 * @access private * * @return WP_Http HTTP Transport object. */ function _wp_http_get_object() { static $http = null; if ( is_null( $http ) ) { $http = new WP_Http(); } return $http; } /** * Retrieves the raw response from a safe HTTP request. * * This function is ideal when the HTTP request is being made to an arbitrary * URL. The URL, and every URL it redirects to, are validated with wp_http_validate_url() * to avoid Server Side Request Forgery attacks (SSRF). * * The only supported protocols are `http` and `https`. * * @since 3.6.0 * * @see wp_remote_request() For more information on the response array format. * @see WP_Http::request() For default arguments information. * @see wp_http_validate_url() For more information about how the URL is validated. * * @link https://owasp.org/www-community/attacks/Server_Side_Request_Forgery * * @param string $url URL to retrieve. * @param array $args Optional. Request arguments. Default empty array. * See WP_Http::request() for information on accepted arguments. * @return array|WP_Error The response or WP_Error on failure. * See WP_Http::request() for information on return value. */ function wp_safe_remote_request( $url, $args = array() ) { $args['reject_unsafe_urls'] = true; $http = _wp_http_get_object(); return $http->request( $url, $args ); } /** * Retrieves the raw response from a safe HTTP request using the GET method. * * This function is ideal when the HTTP request is being made to an arbitrary * URL. The URL, and every URL it redirects to, are validated with wp_http_validate_url() * to avoid Server Side Request Forgery attacks (SSRF). * * The only supported protocols are `http` and `https`. * * @since 3.6.0 * * @see wp_remote_request() For more information on the response array format. * @see WP_Http::request() For default arguments information. * @see wp_http_validate_url() For more information about how the URL is validated. * * @link https://owasp.org/www-community/attacks/Server_Side_Request_Forgery * * @param string $url URL to retrieve. * @param array $args Optional. Request arguments. Default empty array. * See WP_Http::request() for information on accepted arguments. * @return array|WP_Error The response or WP_Error on failure. * See WP_Http::request() for information on return value. */ function wp_safe_remote_get( $url, $args = array() ) { $args['reject_unsafe_urls'] = true; $http = _wp_http_get_object(); return $http->get( $url, $args ); } /** * Retrieves the raw response from a safe HTTP request using the POST method. * * This function is ideal when the HTTP request is being made to an arbitrary * URL. The URL, and every URL it redirects to, are validated with wp_http_validate_url() * to avoid Server Side Request Forgery attacks (SSRF). * * The only supported protocols are `http` and `https`. * * @since 3.6.0 * * @see wp_remote_request() For more information on the response array format. * @see WP_Http::request() For default arguments information. * @see wp_http_validate_url() For more information about how the URL is validated. * * @link https://owasp.org/www-community/attacks/Server_Side_Request_Forgery * * @param string $url URL to retrieve. * @param array $args Optional. Request arguments. Default empty array. * See WP_Http::request() for information on accepted arguments. * @return array|WP_Error The response or WP_Error on failure. * See WP_Http::request() for information on return value. */ function wp_safe_remote_post( $url, $args = array() ) { $args['reject_unsafe_urls'] = true; $http = _wp_http_get_object(); return $http->post( $url, $args ); } /** * Retrieves the raw response from a safe HTTP request using the HEAD method. * * This function is ideal when the HTTP request is being made to an arbitrary * URL. The URL, and every URL it redirects to, are validated with wp_http_validate_url() * to avoid Server Side Request Forgery attacks (SSRF). * * The only supported protocols are `http` and `https`. * * @since 3.6.0 * * @see wp_remote_request() For more information on the response array format. * @see WP_Http::request() For default arguments information. * @see wp_http_validate_url() For more information about how the URL is validated. * * @link https://owasp.org/www-community/attacks/Server_Side_Request_Forgery * * @param string $url URL to retrieve. * @param array $args Optional. Request arguments. Default empty array. * See WP_Http::request() for information on accepted arguments. * @return array|WP_Error The response or WP_Error on failure. * See WP_Http::request() for information on return value. */ function wp_safe_remote_head( $url, $args = array() ) { $args['reject_unsafe_urls'] = true; $http = _wp_http_get_object(); return $http->head( $url, $args ); } /** * Performs an HTTP request and returns its response. * * There are other API functions available which abstract away the HTTP method: * * - Default 'GET' for wp_remote_get() * - Default 'POST' for wp_remote_post() * - Default 'HEAD' for wp_remote_head() * * Important: If the URL is user-controlled, use `wp_safe_remote_request()` instead. * * @since 2.7.0 * * @see WP_Http::request() For information on default arguments. * * @param string $url URL to retrieve. * @param array $args Optional. Request arguments. Default empty array. * See WP_Http::request() for information on accepted arguments. * @return array|WP_Error The response array or a WP_Error on failure. * See WP_Http::request() for information on return value. */ function wp_remote_request( $url, $args = array() ) { $http = _wp_http_get_object(); return $http->request( $url, $args ); } /** * Performs an HTTP request using the GET method and returns its response. * * Important: If the URL is user-controlled, use `wp_safe_remote_get()` instead. * * @since 2.7.0 * * @see wp_remote_request() For more information on the response array format. * @see WP_Http::request() For default arguments information. * * @param string $url URL to retrieve. * @param array $args Optional. Request arguments. Default empty array. * See WP_Http::request() for information on accepted arguments. * @return array|WP_Error The response or WP_Error on failure. * See WP_Http::request() for information on return value. */ function wp_remote_get( $url, $args = array() ) { $http = _wp_http_get_object(); return $http->get( $url, $args ); } /** * Performs an HTTP request using the POST method and returns its response. * * Important: If the URL is user-controlled, use `wp_safe_remote_post()` instead. * * @since 2.7.0 * * @see wp_remote_request() For more information on the response array format. * @see WP_Http::request() For default arguments information. * * @param string $url URL to retrieve. * @param array $args Optional. Request arguments. Default empty array. * See WP_Http::request() for information on accepted arguments. * @return array|WP_Error The response or WP_Error on failure. * See WP_Http::request() for information on return value. */ function wp_remote_post( $url, $args = array() ) { $http = _wp_http_get_object(); return $http->post( $url, $args ); } /** * Performs an HTTP request using the HEAD method and returns its response. * * Important: If the URL is user-controlled, use `wp_safe_remote_head()` instead. * * @since 2.7.0 * * @see wp_remote_request() For more information on the response array format. * @see WP_Http::request() For default arguments information. * * @param string $url URL to retrieve. * @param array $args Optional. Request arguments. Default empty array. * See WP_Http::request() for information on accepted arguments. * @return array|WP_Error The response or WP_Error on failure. * See WP_Http::request() for information on return value. */ function wp_remote_head( $url, $args = array() ) { $http = _wp_http_get_object(); return $http->head( $url, $args ); } /** * Retrieves only the headers from the raw response. * * @since 2.7.0 * @since 4.6.0 Return value changed from an array to an WpOrg\Requests\Utility\CaseInsensitiveDictionary instance. * * @see \WpOrg\Requests\Utility\CaseInsensitiveDictionary * * @param array|WP_Error $response HTTP response. * @return \WpOrg\Requests\Utility\CaseInsensitiveDictionary|array The headers of the response, or empty array * if incorrect parameter given. */ function wp_remote_retrieve_headers( $response ) { if ( is_wp_error( $response ) || ! isset( $response['headers'] ) ) { return array(); } return $response['headers']; } /** * Retrieves a single header by name from the raw response. * * @since 2.7.0 * * @param array|WP_Error $response HTTP response. * @param string $header Header name to retrieve value from. * @return array|string The header(s) value(s). Array if multiple headers with the same name are retrieved. * Empty string if incorrect parameter given, or if the header doesn't exist. */ function wp_remote_retrieve_header( $response, $header ) { if ( is_wp_error( $response ) || ! isset( $response['headers'] ) ) { return ''; } if ( isset( $response['headers'][ $header ] ) ) { return $response['headers'][ $header ]; } return ''; } /** * Retrieves only the response code from the raw response. * * Will return an empty string if incorrect parameter value is given. * * @since 2.7.0 * * @param array|WP_Error $response HTTP response. * @return int|string The response code as an integer. Empty string if incorrect parameter given. */ function wp_remote_retrieve_response_code( $response ) { if ( is_wp_error( $response ) || ! isset( $response['response'] ) || ! is_array( $response['response'] ) ) { return ''; } return $response['response']['code']; } /** * Retrieves only the response message from the raw response. * * Will return an empty string if incorrect parameter value is given. * * @since 2.7.0 * * @param array|WP_Error $response HTTP response. * @return string The response message. Empty string if incorrect parameter given. */ function wp_remote_retrieve_response_message( $response ) { if ( is_wp_error( $response ) || ! isset( $response['response'] ) || ! is_array( $response['response'] ) ) { return ''; } return $response['response']['message']; } /** * Retrieves only the body from the raw response. * * @since 2.7.0 * * @param array|WP_Error $response HTTP response. * @return string The body of the response. Empty string if no body or incorrect parameter given. */ function wp_remote_retrieve_body( $response ) { if ( is_wp_error( $response ) || ! isset( $response['body'] ) ) { return ''; } return $response['body']; } /** * Retrieves only the cookies from the raw response. * * @since 4.4.0 * * @param array|WP_Error $response HTTP response. * @return WP_Http_Cookie[] An array of `WP_Http_Cookie` objects from the response. * Empty array if there are none, or the response is a WP_Error. */ function wp_remote_retrieve_cookies( $response ) { if ( is_wp_error( $response ) || empty( $response['cookies'] ) ) { return array(); } return $response['cookies']; } /** * Retrieves a single cookie by name from the raw response. * * @since 4.4.0 * * @param array|WP_Error $response HTTP response. * @param string $name The name of the cookie to retrieve. * @return WP_Http_Cookie|string The `WP_Http_Cookie` object, or empty string * if the cookie is not present in the response. */ function wp_remote_retrieve_cookie( $response, $name ) { $cookies = wp_remote_retrieve_cookies( $response ); if ( empty( $cookies ) ) { return ''; } foreach ( $cookies as $cookie ) { if ( $cookie->name === $name ) { return $cookie; } } return ''; } /** * Retrieves a single cookie's value by name from the raw response. * * @since 4.4.0 * * @param array|WP_Error $response HTTP response. * @param string $name The name of the cookie to retrieve. * @return string The value of the cookie, or empty string * if the cookie is not present in the response. */ function wp_remote_retrieve_cookie_value( $response, $name ) { $cookie = wp_remote_retrieve_cookie( $response, $name ); if ( ! ( $cookie instanceof WP_Http_Cookie ) ) { return ''; } return $cookie->value; } /** * Determines if there is an HTTP Transport that can process this request. * * @since 3.2.0 * * @param array $capabilities Array of capabilities to test or a wp_remote_request() $args array. * @param string $url Optional. If given, will check if the URL requires SSL and adds * that requirement to the capabilities array. * * @return bool */ function wp_http_supports( $capabilities = array(), $url = null ) { $capabilities = wp_parse_args( $capabilities ); $count = count( $capabilities ); // If we have a numeric $capabilities array, spoof a wp_remote_request() associative $args array. if ( $count && count( array_filter( array_keys( $capabilities ), 'is_numeric' ) ) === $count ) { $capabilities = array_combine( array_values( $capabilities ), array_fill( 0, $count, true ) ); } if ( $url && ! isset( $capabilities['ssl'] ) ) { $scheme = parse_url( $url, PHP_URL_SCHEME ); if ( 'https' === $scheme || 'ssl' === $scheme ) { $capabilities['ssl'] = true; } } return WpOrg\Requests\Requests::has_capabilities( $capabilities ); } /** * Gets the HTTP Origin of the current request. * * @since 3.4.0 * * @return string URL of the origin. Empty string if no origin. */ function get_http_origin() { $origin = ''; if ( ! empty( $_SERVER['HTTP_ORIGIN'] ) ) { $origin = $_SERVER['HTTP_ORIGIN']; } /** * Changes the origin of an HTTP request. * * @since 3.4.0 * * @param string $origin The HTTP origin for the request. */ return apply_filters( 'http_origin', $origin ); } /** * Retrieves list of allowed HTTP origins. * * @since 3.4.0 * * @return string[] Array of origin URLs. */ function get_allowed_http_origins() { $admin_origin = parse_url( admin_url() ); $home_origin = parse_url( home_url() ); // @todo Preserve port? $allowed_origins = array_unique( array( 'http://' . $admin_origin['host'], 'https://' . $admin_origin['host'], 'http://' . $home_origin['host'], 'https://' . $home_origin['host'], ) ); /** * Changes the origin types allowed for HTTP requests. * * @since 3.4.0 * * @param string[] $allowed_origins Array of allowed HTTP origins. */ return apply_filters( 'allowed_http_origins', $allowed_origins ); } /** * Determines if the HTTP origin is an authorized one. * * @since 3.4.0 * * @param string|null $origin Origin URL. If not provided, the value of get_http_origin() is used. * @return string Origin URL if allowed, empty string if not. */ function is_allowed_http_origin( $origin = null ) { $origin_arg = $origin; if ( null === $origin ) { $origin = get_http_origin(); } if ( $origin && ! in_array( $origin, get_allowed_http_origins(), true ) ) { $origin = ''; } /** * Changes the allowed HTTP origin result. * * @since 3.4.0 * * @param string $origin Origin URL if allowed, empty string if not. * @param string $origin_arg Original origin string passed into is_allowed_http_origin function. */ return apply_filters( 'allowed_http_origin', $origin, $origin_arg ); } /** * Sends Access-Control-Allow-Origin and related headers if the current request * is from an allowed origin. * * If the request is an OPTIONS request, the script exits with either access * control headers sent, or a 403 response if the origin is not allowed. For * other request methods, you will receive a return value. * * @since 3.4.0 * * @return string|false Returns the origin URL if headers are sent. Returns false * if headers are not sent. */ function send_origin_headers() { $origin = get_http_origin(); if ( is_allowed_http_origin( $origin ) ) { header( 'Access-Control-Allow-Origin: ' . $origin ); header( 'Access-Control-Allow-Credentials: true' ); if ( 'OPTIONS' === $_SERVER['REQUEST_METHOD'] ) { exit; } return $origin; } if ( 'OPTIONS' === $_SERVER['REQUEST_METHOD'] ) { status_header( 403 ); exit; } return false; } /** * Validates a URL as safe for use in the HTTP API. * * The only supported protocols are `http` and `https`. * * Examples of URLs that are considered unsafe: * * - `ftp://example.com/caniload.php` - Invalid protocol - only http and https are allowed. * - `http:///example.com/caniload.php` - Malformed URL. * - `http://user:pass@example.com/caniload.php` - Login information. * - `http://example.invalid/caniload.php` - Invalid hostname, as the IP cannot be looked up in DNS. * * Examples of URLs that are considered unsafe by default but can be allowed with filters: * * - `http://192.168.0.1/caniload.php` - IP address from LAN network. * This can be changed with the {@see 'http_request_host_is_external'} filter. * - `http://198.143.164.252:81/caniload.php` - By default, only ports 80, 443, and 8080 are allowed. * This can be changed with the {@see 'http_allowed_safe_ports'} filter. * * @since 3.5.2 * * @param string $url Request URL. * @return string|false Returns false if the URL is not safe, or the original URL if it is safe. */ function wp_http_validate_url( $url ) { if ( ! is_string( $url ) || '' === $url || is_numeric( $url ) ) { return false; } $original_url = $url; $url = wp_kses_bad_protocol( $url, array( 'http', 'https' ) ); if ( ! $url || strtolower( $url ) !== strtolower( $original_url ) ) { return false; } $parsed_url = parse_url( $url ); if ( ! $parsed_url || empty( $parsed_url['host'] ) ) { return false; } if ( isset( $parsed_url['user'] ) || isset( $parsed_url['pass'] ) ) { return false; } if ( false !== strpbrk( $parsed_url['host'], ':#?[]' ) ) { return false; } $parsed_home = parse_url( get_option( 'home' ) ); $same_host = isset( $parsed_home['host'] ) && strtolower( $parsed_home['host'] ) === strtolower( $parsed_url['host'] ); $host = trim( $parsed_url['host'], '.' ); if ( ! $same_host ) { if ( preg_match( '#^(([1-9]?\d|1\d\d|25[0-5]|2[0-4]\d)\.){3}([1-9]?\d|1\d\d|25[0-5]|2[0-4]\d)$#', $host ) ) { $ip = $host; } else { $ip = gethostbyname( $host ); if ( $ip === $host ) { // Error condition for gethostbyname(). return false; } } if ( $ip ) { $parts = array_map( 'intval', explode( '.', $ip ) ); if ( 127 === $parts[0] || 10 === $parts[0] || 0 === $parts[0] || ( 172 === $parts[0] && 16 <= $parts[1] && 31 >= $parts[1] ) || ( 192 === $parts[0] && 168 === $parts[1] ) ) { // If host appears local, reject unless specifically allowed. /** * Checks if HTTP request is external or not. * * Allows to change and allow external requests for the HTTP request. * * @since 3.6.0 * * @param bool $external Whether HTTP request is external or not. * @param string $host Host name of the requested URL. * @param string $url Requested URL. */ if ( ! apply_filters( 'http_request_host_is_external', false, $host, $url ) ) { return false; } } } } if ( empty( $parsed_url['port'] ) ) { return $url; } $port = $parsed_url['port']; /** * Controls the list of ports considered safe in HTTP API. * * Allows to change and allow external requests for the HTTP request. * * @since 5.9.0 * * @param int[] $allowed_ports Array of integers for valid ports. Default allowed ports * are 80, 443, and 8080. * @param string $host Host name of the requested URL. * @param string $url Requested URL. */ $allowed_ports = apply_filters( 'http_allowed_safe_ports', array( 80, 443, 8080 ), $host, $url ); if ( is_array( $allowed_ports ) && in_array( $port, $allowed_ports, true ) ) { return $url; } if ( $parsed_home && $same_host && isset( $parsed_home['port'] ) && $parsed_home['port'] === $port ) { return $url; } return false; } /** * Marks allowed redirect hosts safe for HTTP requests as well. * * Attached to the {@see 'http_request_host_is_external'} filter. * * @since 3.6.0 * * @param bool $is_external * @param string $host * @return bool */ function allowed_http_request_hosts( $is_external, $host ) { if ( ! $is_external && wp_validate_redirect( 'http://' . $host ) ) { $is_external = true; } return $is_external; } /** * Adds any domain in a multisite installation for safe HTTP requests to the * allowed list. * * Attached to the {@see 'http_request_host_is_external'} filter. * * @since 3.6.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @param bool $is_external * @param string $host * @return bool */ function ms_allowed_http_request_hosts( $is_external, $host ) { global $wpdb; static $queried = array(); if ( $is_external ) { return $is_external; } if ( get_network()->domain === $host ) { return true; } if ( isset( $queried[ $host ] ) ) { return $queried[ $host ]; } $queried[ $host ] = (bool) $wpdb->get_var( $wpdb->prepare( "SELECT domain FROM $wpdb->blogs WHERE domain = %s LIMIT 1", $host ) ); return $queried[ $host ]; } /** * A wrapper for PHP's parse_url() function that handles consistency in the return values * across PHP versions. * * Across various PHP versions, schemeless URLs containing a ":" in the query * are being handled inconsistently. This function works around those differences. * * @since 4.4.0 * @since 4.7.0 The `$component` parameter was added for parity with PHP's `parse_url()`. * * @link https://www.php.net/manual/en/function.parse-url.php * * @param string $url The URL to parse. * @param int $component The specific component to retrieve. Use one of the PHP * predefined constants to specify which one. * Defaults to -1 (= return all parts as an array). * @return mixed False on parse failure; Array of URL components on success; * When a specific component has been requested: null if the component * doesn't exist in the given URL; a string or - in the case of * PHP_URL_PORT - integer when it does. See parse_url()'s return values. */ function wp_parse_url( $url, $component = -1 ) { $to_unset = array(); $url = (string) $url; if ( str_starts_with( $url, '//' ) ) { $to_unset[] = 'scheme'; $url = 'placeholder:' . $url; } elseif ( str_starts_with( $url, '/' ) ) { $to_unset[] = 'scheme'; $to_unset[] = 'host'; $url = 'placeholder://placeholder' . $url; } $parts = parse_url( $url ); if ( false === $parts ) { // Parsing failure. return $parts; } // Remove the placeholder values. foreach ( $to_unset as $key ) { unset( $parts[ $key ] ); } return _get_component_from_parsed_url_array( $parts, $component ); } /** * Retrieves a specific component from a parsed URL array. * * @internal * * @since 4.7.0 * @access private * * @link https://www.php.net/manual/en/function.parse-url.php * * @param array|false $url_parts The parsed URL. Can be false if the URL failed to parse. * @param int $component The specific component to retrieve. Use one of the PHP * predefined constants to specify which one. * Defaults to -1 (= return all parts as an array). * @return mixed False on parse failure; Array of URL components on success; * When a specific component has been requested: null if the component * doesn't exist in the given URL; a string or - in the case of * PHP_URL_PORT - integer when it does. See parse_url()'s return values. */ function _get_component_from_parsed_url_array( $url_parts, $component = -1 ) { if ( -1 === $component ) { return $url_parts; } $key = _wp_translate_php_url_constant_to_key( $component ); if ( false !== $key && is_array( $url_parts ) && isset( $url_parts[ $key ] ) ) { return $url_parts[ $key ]; } else { return null; } } /** * Translates a PHP_URL_* constant to the named array keys PHP uses. * * @internal * * @since 4.7.0 * @access private * * @link https://www.php.net/manual/en/url.constants.php * * @param int $constant PHP_URL_* constant. * @return string|false The named key or false. */ function _wp_translate_php_url_constant_to_key( $constant ) { $translation = array( PHP_URL_SCHEME => 'scheme', PHP_URL_HOST => 'host', PHP_URL_PORT => 'port', PHP_URL_USER => 'user', PHP_URL_PASS => 'pass', PHP_URL_PATH => 'path', PHP_URL_QUERY => 'query', PHP_URL_FRAGMENT => 'fragment', ); if ( isset( $translation[ $constant ] ) ) { return $translation[ $constant ]; } else { return false; } }