我正在尝试使用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
}
有趣的是,我能够用邮递员成功地设置一个标题。知道我做错了什么吗?如果您能提供任何帮助,我们将不胜感激——您已经为此付出了数小时的努力。
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,
);