描述
另见
- wp_remote_request():有关响应数组格式的详细信息。
- WP_Http::request():获取默认参数信息。
- 更多信息请查阅:插件开发手册 - HTTP API
参数
- $url
-
(string)(必填) 要检索的URL。
- $args
-
(array)(可选) 请求参数。
默认值: array()
返回
(array|WP_Error) 响应(response)结果,或失败时的WP_Error。
源码
更新日志
版本 | 描述 |
---|---|
2.7.0 | 开始引入 |
使用示例
POST数据应作为数组在body中发送。传递POST数据的示例:
$response = wp_remote_post( $url, array( 'method' => 'POST', 'timeout' => 45, 'redirection' => 5, 'httpversion' => '1.0', 'blocking' => true, 'headers' => array(), 'body' => array( 'username' => 'bob', 'password' => '1234xyz' ), 'cookies' => array() ) ); if ( is_wp_error( $response ) ) { $error_message = $response->get_error_message(); echo "Something went wrong: $error_message"; } else { echo 'Response:<pre>'; print_r( $response ); echo '</pre>'; }
在上面的示例中,
$response['body']
将包含服务器返回的实际页面内容。基本身份验证示例:
$response = wp_remote_post( $url, array( 'body' => $data, 'headers' => array( 'Authorization' => 'Basic ' . base64_encode( $username . ':' . $password ), ), ) );
JSON body的示例:
$endpoint = 'api.example.com'; $body = [ 'name' => 'Pixelbart', 'email' => 'pixelbart@example.com', ]; $body = wp_json_encode( $body ); $options = [ 'body' => $body, 'headers' => [ 'Content-Type' => 'application/json', ], 'timeout' => 60, 'redirection' => 5, 'blocking' => true, 'httpversion' => '1.0', 'sslverify' => false, 'data_format' => 'body', ]; wp_remote_post( $endpoint, $options );
$apiUrl = 'https://api.example.com'; $apiResponse = wp_remote_post( $apiUrl, [ 'method' => 'GET', 'sslverify' => false, 'headers' => [ 'content-type' => 'application/json', 'user_key' => 'xxxxxxxxxxxxx', ], ] ); $apiBody = json_decode( wp_remote_retrieve_body( $apiResponse ) );
另请参见wp_safe_remote_post(),特别是在使用动态URL调用时。
我认为值得一提的几个注意事项是,如果您使用的是需要身份验证的Wordpress API端点,则可以将
_wpnonce
参数与会话cookie一起传递以正确身份验证,如下所示:$endpoint = get_rest_url( null, 'ninja-forms-submissions/submissions/get' ); $body = array( '_wpnonce' => wp_create_nonce( 'wp_rest' ), 'type' => 'columns', 'form_ids' => '1' ); // Need session cookies passed to verify nonce $cookies = array(); foreach ( $_COOKIE as $name => $value ) { $cookies[] = new WP_Http_Cookie( array( 'name' => $name, 'value' => $value ) ); } $options = array( 'method'. => 'GET', 'body' => $body, 'headers' => array( 'Cache-Control' => 'no-cache', ), 'timeout' => 60, 'redirection' => 5, 'blocking' => true, 'httpversion' => '1.0', 'sslverify' => false, 'data_format' => 'body', 'cookies' => $cookies ); $response = wp_remote_post( $endpoint, $options );
请注意,在本例中,我还使用
wp_remote_post
执行GET
调用(通过传递'method'参数),也可以使用wp_remote_get替代。