尝试从php程序向couchdb添加文档。 我想使用couchdb自动生成的uuid作为密钥。 以下代码给出错误
CONTENT TYPE MUST BE APPLICATION/JSON
$couch = new CouchSimple();
$resp=$couch->send("POST",'/aaa-stores','{"foo":"bar"}');
$json=json_decode($resp);
if(isset($json->{'error'}))
{
echo $json->{'reason'};
}
class CouchSimple {
private $host = "localhost" ,$port = 5984,$user=" ",$pass =" ";
function send($method, $url, $post_data = NULL)
{
$s = fsockopen($this->host, $this->port, $errno, $errstr);
if(!$s) {
echo "$errno: $errstr\n";
return false;
}
$request = "$method $url HTTP/1.0\r\nHost: $this->host\r\n";
if ($this->user)
{
$request .= "Authorization: Basic ".base64_encode("$this->user :$this->pass")."\r\n";
}
if($post_data) {
$request .= "Content-Length: ".strlen($post_data)."\r\n\r\n";
$request .= 'Content-Type: application/json'."\r\n\r\n";
$request .= "$post_data\r\n";
}
else {
$request .= "\r\n";
}
fwrite($s, $request);
$response = "";
while(!feof($s)) {
$response .= fgets($s);
}
list($this->headers, $this->body) = explode("\r\n\r\n", $response);
return $this->body;
}
答案 0 :(得分:2)
这里有几个选项。您可以尝试使用CouchDB库(例如https://github.com/ibm-watson-data-lab/php-couchdb - 免责声明,我是该项目的维护者)。
至少可以为PHP使用功能更全面的HTTP库,例如Guzzle(http://guzzlephp.org/)。这样可以更轻松地添加标头并对主体进行编码,而无需从PHP代码输出原始HTTP。这是一篇博客文章,展示了如何使用Guzzle与PHP中的CouchDB交流,这可能也会有所帮助:https://developer.ibm.com/clouddataservices/2016/07/27/get-started-with-couchdb-php-guzzle/
最后提示:尝试使用http://requestb.in获取用于测试您发送的请求的URL - 根据我的经验,它确实有助于调试此类事情。