база данных — POST-запрос к couchdb из переполнения стека

Попытка добавить документ в couchdb из программы php.
я хотел использовать couchdb автоматически сгенерированный uuid в качестве ключа.
код ниже выдает ошибку как

ТИП СОДЕРЖАНИЯ ДОЛЖЕН БЫТЬ ПРИМЕНЕН. / 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

Решение

У вас есть несколько вариантов здесь. Вы можете попробовать использовать библиотеку для CouchDB (например, https://github.com/ibm-watson-data-lab/php-couchdb — отказ от ответственности, я поддерживаю этот проект).

Как минимум, было бы хорошо использовать более полнофункциональную HTTP-библиотеку для PHP, такую ​​как Guzzle (http://guzzlephp.org/). Это облегчит добавление заголовков и кодирование тела без необходимости выводить необработанный HTTP из вашего кода PHP. Вот сообщение в блоге, показывающее, как использовать Guzzle для общения с CouchDB из PHP, что также может быть полезно: https://developer.ibm.com/clouddataservices/2016/07/27/get-started-with-couchdb-php-guzzle/

Последний совет: попробуйте использовать http://requestb.in чтобы получить URL-адрес для проверки того, какой запрос вы отправляете — это действительно помогает при отладке подобных вещей по моему опыту.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector