CouchDB 1.0.2 http_post_data on View from PHP Pecl Error Bad


CouchDB 1.0.2 http_post_data on View from PHP Pecl Error Bad Content Type

首先,我的当前系统是这样的:

  • 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的响应。

有什么建议吗?这件事已经让我抓狂一天了。

谢谢。

http_post_data应该接收一个assoc数组(不是字符串)作为选项。

你应该使用array('headers' => array('content-type' => 'application/json'))而不是"Content-Type:application/json"