Cloudant 的错误请求,PHP 和范围查询
Bad request with Cloudant, PHP and range query
我正在尝试使用 PHP cURL 和 Cloudant 进行范围查询。
我在 Cloudant 中设置了以下搜索索引:
{
"_id": "_design/date",
"_rev": "20-822ebda694f4fb57dc0a48bf60f6570f",
"views": {},
"language": "javascript",
"indexes": {
"by_date": {
"analyzer": "classic",
"index": "function (doc) {\n index(\"default\", doc.datequery);\n}"
}
}
}
然后在我的 PHP 文档中执行以下操作:
$urlstuff = "[20180110 TO 20180119]";
$url = "https://user:pass.@user.cloudant.com/db/_design/date/_search/by_date?q=".$urlstuff."&include_docs=true&limit=200";
$ch = curl_init(); // initialize curl handle
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
我收到错误请求。
如果我替换:
$urlstuff = "[20180110 TO 20180119]";
为
$urlstuff = "20180117";
然后我得到了很好的结果。
是方括号弄乱了我的 cURL 吗?
我错过了什么?
是的,您走对了。如果您对变量进行转义(例如使用 http://php.net/manual/en/function.curl-escape.php?),您的查询应该有效:
curl -g -X GET 'https://user:password@user-bluemix.cloudant.com/db/_design/date/_search/by_date?q=[20180110 TO 20180119]&include_docs=true&limit=20'
{"error":"bad_request","reason":"Bad request"}
对
curl -X GET 'https://user:password@user-bluemix.cloudant.com/db/_design/date/_search/by_date?q=%5B20180110%20TO%2020180119%5D&include_docs=true&limit=20'
{"total_rows":1, ...
我正在尝试使用 PHP cURL 和 Cloudant 进行范围查询。
我在 Cloudant 中设置了以下搜索索引:
{
"_id": "_design/date",
"_rev": "20-822ebda694f4fb57dc0a48bf60f6570f",
"views": {},
"language": "javascript",
"indexes": {
"by_date": {
"analyzer": "classic",
"index": "function (doc) {\n index(\"default\", doc.datequery);\n}"
}
}
}
然后在我的 PHP 文档中执行以下操作:
$urlstuff = "[20180110 TO 20180119]";
$url = "https://user:pass.@user.cloudant.com/db/_design/date/_search/by_date?q=".$urlstuff."&include_docs=true&limit=200";
$ch = curl_init(); // initialize curl handle
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
我收到错误请求。
如果我替换:
$urlstuff = "[20180110 TO 20180119]";
为
$urlstuff = "20180117";
然后我得到了很好的结果。
是方括号弄乱了我的 cURL 吗? 我错过了什么?
是的,您走对了。如果您对变量进行转义(例如使用 http://php.net/manual/en/function.curl-escape.php?),您的查询应该有效:
curl -g -X GET 'https://user:password@user-bluemix.cloudant.com/db/_design/date/_search/by_date?q=[20180110 TO 20180119]&include_docs=true&limit=20'
{"error":"bad_request","reason":"Bad request"}
对
curl -X GET 'https://user:password@user-bluemix.cloudant.com/db/_design/date/_search/by_date?q=%5B20180110%20TO%2020180119%5D&include_docs=true&limit=20'
{"total_rows":1, ...