从PHP Pecl错误不良内容类型查看CouchDB 1.0.2 http_post_data

时间:2011-07-09 23:02:47

标签: php couchdb pecl

首先,这是我目前的系统:

  • 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)发布到具有该键列表(detailed here,在“查询选项”下)的列表函数中。此列表函数返回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"}

我为此视图生成的网址是正确的。我可以将我的POST调用改为

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

但实际上不会返回任何内容(我正在查看Firebug中的输出)。要发回我的结果,这里是相关的PHP:

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

$response包含来自对CouchDB的http_post_data调用的响应。

有什么建议吗?这让我疯狂了一天,现在有点疯狂。

感谢。

1 个答案:

答案 0 :(得分:3)

http_post_data应该接收选项的关联数组(不是字符串)。

您应该使用array('headers' => array('content-type' => 'application/json'))代替"Content-Type:application/json"