CouchDB 1.0.2 http_post_data при просмотре из PHP Ошибка Pecl Неверный тип содержимого - PullRequest
1 голос
/ 10 июля 2011

Во-первых, вот как выглядит моя текущая система:

  • CouchDB 1.0.2
  • PHP 5.3.6
  • Apache httpd 2.2.19
  • PECL http 1.7.1
  • CouchDB-Lucene 0.6.1

Я создаю мини-поисковик с CouchDB и CouchDB-Lucene. Когда пользователь вводит запрос, я помещаю POST в мой PHP-скрипт, который затем запрашивает couchdb-lucene. Couchdb-lucene затем вернет список соответствующих ключей документа в скрипт PHP. Затем я отправляю данные (с http_post_data) в функцию List с этим списком ключей ( подробно здесь , в разделе «Параметры запроса»). Эта функция списка возвращает результаты в формате HTML. Это та часть, которая работает.

Мои потребности сейчас меняются, и я хотел бы запросить только представление и вернуть JSON. Однако, когда я это сделаю, это ответ от вызова http_post_data:

HTTP/1.1 415 Unsupported Media Type Server: CouchDB/1.0.2 (Erlang OTP/R13B) Date: Sat, 09 Jul 2011 22:22:51 GMT Content-Type: text/plain;charset=utf-8 Content-Length: 78 Cache-Control: must-revalidate {"error":"bad_content_type","reason":"Content-Type must be application/json"}

URL-адрес, который я генерирую для этого представления, является правильным. Я могу изменить свой POST-вызов на

http_post_data(url/of/view, $key_string, "Content-Type:application/json");

но на самом деле ничего не будет возвращено (я смотрю на вывод в Firebug). Чтобы вернуть мои результаты, вот соответствующий PHP:

HttpResponse::setContentType("application/json"); HttpResponse::setData($response);

$response содержит ответ от вызова http_post_data к CouchDB.

Есть предложения? Это сводило меня с ума на один день и немного.

Спасибо.

1 Ответ

3 голосов
/ 10 июля 2011

http_post_data предполагается получить ассоциированный массив (не строку) для опций.

Вы должны использовать array('headers' => array('content-type' => 'application/json')) вместо "Content-Type:application/json"

...