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

WordPress自定义REST API浏览器可访问curl请求报404找不到路由

问题原因

你注册REST路由时指定的允许请求方法为WP_REST_Server::READABLE,该常量对应仅允许GET类型的请求,浏览器直接访问路由默认发送的是GET请求所以运行正常;而你发起curl请求时指定了CURLOPT_CUSTOMREQUEST => "POST"用POST方式请求,请求方法与路由允许的方法不匹配,因此WordPress返回404找不到对应路由的错误。

修复方案

你可以根据自己的业务需求选择以下任意一种方案修改:

方案1:修改路由支持POST请求

如果你确实需要通过POST方式传递参数,将路由注册代码中的methods参数修改为支持POST的取值即可:

  • 仅支持POST:改为WP_REST_Server::CREATABLE(该常量对应POST请求)
  • 同时支持GET和POST:改为[ WP_REST_Server::READABLE, WP_REST_Server::CREATABLE ] 或者直接写[ 'GET', 'POST' ]
  • 支持所有请求类型:改为WP_REST_Server::ALLMETHODS

修改后的路由注册参考代码:

function init_my_func(){
    $namespace = 'test/v1';
    $route     = 'fire';

    register_rest_route($namespace, $route, array(
        'methods'   => WP_REST_Server::CREATABLE, // 这里修改为对应POST的常量,也可按需求写多个方法
        'callback'  => 'my_func',
        'args' => array(),
        'permission_callback' => function () {
        return true;
        }
    ));
}

方案2:修改curl请求为GET方式

如果你不需要用POST传递参数,将curl的请求方法改为GET即可,参数可直接拼接在URL后:

$params = array(
    'arg1' => 'value1'
);
$url = "http://example.com/wp-json/test/v1/fire?" . http_build_query($params);
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET", // 修改为GET请求
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_HTTPHEADER => array(
        "cache-control: no-cache"
    ),
));

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);

内容的提问来源于stack exchange,提问作者aidinMC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:27:04