当前浏览:首页 / WordPress函数 / wp_remote_post()

wp_remote_post( string $url, array $args = array() )

使用POST方法执行HTTP请求并返回其响应

postmore...

remote 远程


描述

另见


参数

$url

(string)(必填) 要检索的URL。

$args

(array)(可选) 请求参数。

默认值: array()


返回

(array|WP_Error) 响应(response)结果,或失败时的WP_Error



源码

查看源码 官方文档


更新日志

版本描述
2.7.0开始引入

使用示例

  • 示例1

    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']将包含服务器返回的实际页面内容。

  • 示例2

    基本身份验证示例:

    $response = wp_remote_post( $url, array(
        'body'    => $data,
        'headers' => array(
            'Authorization' => 'Basic ' . base64_encode( $username . ':' . $password ),
        ),
    ) );
    
  • 示例3

    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 );
    
  • 示例4
    $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 ) );
    
  • 示例5

    另请参见wp_safe_remote_post(),特别是在使用动态URL调用时。

  • 示例6

    我认为值得一提的几个注意事项是,如果您使用的是需要身份验证的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替代。