WP_REMOTE_POST请求被API提供程序阻止

时间:2021-05-12 作者:Duryab

我正试图通过WordPress自己的方法,即wp\\u remote\\u POST()发出一些API POST请求

下面是我使用的示例代码:

$args = array (
    \'sslverify\' => false,
    \'headers\' => [
        \'Authorization: Bearer {API_KEY}\',
        \'Content-Type: application/json\'
    ],
    \'body\' => array (
        \'region\' => \'USA\',
        \'plan\' => 1,
        \'label\' => \'API Test\',
        \'app_id\' => 2
    )
);

$response = wp_remote_post( "https://api.example.com/plans/create", $args );

$response = wp_remote_retrieve_body($response);

error_log($response);
但它返回了一个403禁止的错误,下面是详细信息:

<HTML>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>
但是,当我尝试使用cURL PHP库使用相同的参数和设置发出POST请求时,API请求成功了,返回了200个带有格式化JSON数据的响应。

我已经联系了API提供商公司,他们说从他们这方面来说一切都很好,他们也无能为力。

还有一件事,我已经在实时网站服务器和本地主机环境上测试了相同的调用。但这两种情况都是一样的。

有人知道为什么wp\\u remote\\u post()会在这个特定的API提供程序上导致这些错误吗(是的,我已经用另一个API提供程序测试了wp\\u remote\\u post方法,它似乎工作得很好)?

非常感谢<杜里亚布·阿齐兹。

1 个回复
SO网友:Felix

如果API需要JSON对象,则应将参数更改为:

$args = array (
    \'sslverify\' => false,
    \'data_format\' => \'body\',
    \'headers\' => [
        \'Authorization: Bearer {API_KEY}\',
        \'Content-Type: application/json\'
    ],
    \'body\' => json_encode([
        \'region\' => \'USA\',
        \'plan\' => 1,
        \'label\' => \'API Test\',
        \'app_id\' => 2
    ]),
);
将数据编码为JSON字符串

相关推荐

change user password REST API

我试图让用户通过API更改密码。这里的情况是,我可以向用户端点发送一个POST请求,并在最后使用用户ID,在请求正文中以JSON的形式发送新密码。所以发布到:https://example.com/wp-json/wp/v2/users/123在身体里:{ "password": "mySecretPassword" } 在这种情况下,用户通过JWT进行身份验证,需要在请求的标头中发送令牌。当我在《邮递员》中尝试这一点时,请求挂起了