为什么CURLOPT_POSTFIELDS不接受json_encode?
Why CURLOPT_POSTFIELDS does not accept json_encode?
CURLOPT_POSTFIELDS
不接受json_encode,但是如果我直接在CURLOPT_POSTFIELDS
里面写json如果是输入
这returns一个错误
{"error":"bad_request","reason":"Request body must be a JSON object"}
$bd = "fiscont_db_catalogo_cuentas";
$ch = curl_init();
$document ='{"docs":[{"key":"baz","name":"bazzel"},{"key":"bar","name":"barry"}]}';
$json = json_encode($document);
echo $json;
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:5984/'.$bd.'/_bulk_docs');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); /* or PUT */
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-type: application/json',
'Accept: */*'
));
curl_setopt($ch, CURLOPT_USERPWD, 'root:addc1243c');
$response = curl_exec($ch);
echo $response;
curl_close($ch);
但这是返回:
[{"ok":true,"id":"8b3c672ffd4b8dcd7da313e9e9011243","rev":"1-f5f3f3e496c72307975a69c73fd53d42"},{"ok":true,"id":"8b3c672ffd4b8dcd7da313e9e9011c5a","rev":"1-8ad0e70d5e6edd474ec190eac2376bde"}]
$bd = "fiscont_db_catalogo_cuentas";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:5984/'.$bd.'/_bulk_docs');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); /* or PUT */
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"docs\":[{\"key\":\"baz\",\"name\":\"bazzel\"},{\"key\":\"bar\",\"name\":\"barry\"}]}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-type: application/json',
'Accept: */*'
));
curl_setopt($ch, CURLOPT_USERPWD, 'root:addc1243c');
$response = curl_exec($ch);
echo $response;
curl_close($ch);
json_encode
以数组或对象作为参数。在您的示例中,您将 JSON 字符串编码为 JSON 这没有意义。
如果你用这个替换你的行:
$document =['docs' => [['key'=>'baz','name'=>'bazzel'],['key'=>'bar','name'=>'barry']];
它将正确地将您的 PHP 关联数组转换为 JSON。
CURLOPT_POSTFIELDS
不接受json_encode,但是如果我直接在CURLOPT_POSTFIELDS
里面写json如果是输入
这returns一个错误
{"error":"bad_request","reason":"Request body must be a JSON object"}
$bd = "fiscont_db_catalogo_cuentas";
$ch = curl_init();
$document ='{"docs":[{"key":"baz","name":"bazzel"},{"key":"bar","name":"barry"}]}';
$json = json_encode($document);
echo $json;
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:5984/'.$bd.'/_bulk_docs');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); /* or PUT */
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-type: application/json',
'Accept: */*'
));
curl_setopt($ch, CURLOPT_USERPWD, 'root:addc1243c');
$response = curl_exec($ch);
echo $response;
curl_close($ch);
但这是返回:
[{"ok":true,"id":"8b3c672ffd4b8dcd7da313e9e9011243","rev":"1-f5f3f3e496c72307975a69c73fd53d42"},{"ok":true,"id":"8b3c672ffd4b8dcd7da313e9e9011c5a","rev":"1-8ad0e70d5e6edd474ec190eac2376bde"}]
$bd = "fiscont_db_catalogo_cuentas";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:5984/'.$bd.'/_bulk_docs');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); /* or PUT */
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"docs\":[{\"key\":\"baz\",\"name\":\"bazzel\"},{\"key\":\"bar\",\"name\":\"barry\"}]}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-type: application/json',
'Accept: */*'
));
curl_setopt($ch, CURLOPT_USERPWD, 'root:addc1243c');
$response = curl_exec($ch);
echo $response;
curl_close($ch);
json_encode
以数组或对象作为参数。在您的示例中,您将 JSON 字符串编码为 JSON 这没有意义。
如果你用这个替换你的行:
$document =['docs' => [['key'=>'baz','name'=>'bazzel'],['key'=>'bar','name'=>'barry']];
它将正确地将您的 PHP 关联数组转换为 JSON。