You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WordPress应用密码发起认证请求时遭遇401错误(incorrect_password)

问题分析与解决思路

请求返回401错误明确指向应用密码无效,结合你已排除插件影响、Postman测试结果一致、Kinsta托管环境这些信息,从以下几个方向排查解决:

1. 应用密码的生成与使用规范

  • 确认应用密码是针对目标WordPress用户在后台正确生成的:需进入用户个人资料页(用户 > 个人资料)底部的“应用密码”区域生成,生成后完整复制密码(密码格式为4组4位字符,带空格或去掉空格都可被WordPress识别,注意不要遗漏字符)。
  • 确保使用的是用户的登录用户名,而非昵称或显示名称。

2. Kinsta环境的特殊配置检查

Kinsta的Nginx环境可能对请求头有特殊处理:

  • 确认站点的WP_HOME和WP_SITEURL均为HTTPS协议,Kinsta默认强制HTTPS,HTTP请求的Authorization头可能被拦截丢失。
  • 检查Kinsta站点设置中是否开启了WAF等安全规则,可临时关闭测试是否是规则拦截了请求。

3. 代码错误修正

你的代码存在两个关键问题,直接影响认证和请求解析:

  • 声明了Content-Type: application/json,但请求体是PHP数组,wp_remote_post会自动将其转为application/x-www-form-urlencoded格式,导致Content-Type不匹配,WordPress无法正确处理。
  • 错误处理逻辑缺失HTTP状态码判断,即使返回401也会返回成功提示。

修正后的代码:

$auth = base64_encode($cc_agent_un . ':' . $cc_agent_ap);
$wp_request_headers = array(
    'Authorization' => 'Basic ' . $auth,
    'Content-Type' => 'application/json'
);
// 将请求体转为JSON字符串,匹配Content-Type
$body = wp_json_encode(array(
    'title' => $blogTitle,
    'content' => $blogContent,
    'status' => 'publish'
));
$result = wp_remote_post($url, array(
    'headers' => $wp_request_headers,
    'body' => $body,
    'method' => 'POST',
    'data_format' => 'body'
));

// 完善错误处理,包含HTTP状态码校验
if (is_wp_error($result)) {
    return array(
        'status' => 'Blog Post Failed: ' . $result->get_error_message()
    );
} else {
    $response_code = wp_remote_retrieve_response_code($result);
    if ($response_code === 201 || $response_code === 200) {
        return array(
            'status' => 'Blog Has Been Successfully Posted'
        );
    } else {
        $response_body = json_decode(wp_remote_retrieve_body($result), true);
        $error_msg = isset($response_body['message']) ? $response_body['message'] : 'Unknown error';
        return array(
            'status' => 'Blog Post Failed: ' . $error_msg . ' (Code: ' . $response_code . ')'
        );
    }
}

4. Postman测试的正确方式

在Postman中测试时需注意:

  • 请求方法为POST,URL使用正确的REST API端点(如https://your-site.com/wp-json/wp/v2/posts)。
  • Authorization选择Basic Auth类型,直接输入用户名和应用密码,让Postman自动处理Base64编码,避免手动编码时出现字符错误。
  • Body选择raw,格式设置为JSON,输入符合格式的请求体:
{
    "title": "测试标题",
    "content": "测试内容",
    "status": "publish"
}

内容的提问来源于stack exchange,提问作者Michael Christopher Martire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:17:23