使用REST API、cURL和OAuth创建POST返回401错误

时间:2017-06-04 作者:Dan P

我正在尝试使用RESTAPI、OAuth和cURL创建WordPress帖子。然而,我遇到了一些麻烦。

我可以使用以下代码创建一篇空白帖子(无标题、slug等):

$header = array(buildAuthorizationHeader($oauth), \'Expect:\');
$options = array( CURLOPT_HTTPHEADER => $header,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_POST => true,
    CURLOPT_URL => $url,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYPEER => false);
这就像预期的一样——成功授权,并在WordPress中创建一个空白帖子。但是,当我通过添加

CURLOPT_POSTFIELDS => "title=testTitle",
我收到一个错误:

{
"data": {
    "code": "json_oauth1_signature_mismatch",
    "message": "OAuth signature does not match",
    "data": {
        "status": 401
    }
},
"headers": [],
"status": 401
}
有趣的是,我能够用邮递员成功地设置一个标题。知道我做错了什么吗?如果您能提供任何帮助,我们将不胜感激——您已经为此付出了数小时的努力。

1 个回复
SO网友:Tim Elsass

REST API专门使用JSON作为请求和响应格式,包括错误响应

--WordPress REST API Reference

我会尝试显式设置内容类型/长度,并使用类似的json编码数据(假设您需要指定在提供的代码中执行的所有选项):

$data = array(
    \'title\' => \'testTitle\',
    \'content\' => \'\',
);

$data = json_encode( $data );

$header = array(
    buildAuthorizationHeader( $oauth ),
    \'Content-Type: application/json\',
    \'Content-Length: \' . strlen( $data ),
    \'Expect:\',
);

$options = array(
    CURLOPT_HTTPHEADER => $header,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_POST => true,
    CURLOPT_URL => $url,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_POSTFIELDS => $data,
);

结束

相关推荐

EDIT-Comments.php COMMENT_ROW_ACTIONS AJAX问题

在编辑注释上。php页面,我正在连接到comment\\u row\\u actions过滤器,以便在末尾添加另一个链接。我正在复制“Approve”链接,添加另一个查询键和值,并修改锚文本。我想根据新查询键的值添加一些注释元。批准的链接:/wp-admin/comment.php?c=9999&action=approvecomment&_wpnonce=8526c66已批准的元链接/wp-admin/comment.php?c=9999&action=approvecommen