我正在创建一个在CouchDB中存储数据的android应用程序,我需要从android应用程序创建一个数据库。我需要用java方法执行命令“curl-X PUT http://user:passwd@127.0.0.1:5984/myDataBase”。
我已经实现了以下功能:
public static boolean createDatabase(String hostUrl, String databaseName) {
try {
HttpPut httpPutRequest = new HttpPut(hostUrl + databaseName);
JSONObject jsonResult = sendCouchRequest(httpPutRequest);
return jsonResult.getBoolean("ok");
}
catch (Exception e) {
e.printStackTrace();
}
return false;
}
private static JSONObject sendCouchRequest(HttpUriRequest request) {
try {
HttpResponse httpResponse = (HttpResponse) new DefaultHttpClient().execute(request);
HttpEntity entity = httpResponse.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
String resultString = convertStreamToString(instream);
instream.close();
JSONObject jsonResult = new JSONObject(resultString);
return jsonResult;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
我通过以下方式调用该函数:
createDatabase("http://user:passwd@127.0.0.1/","myDataBase");
但没有结果。我认为问题在于用户:passwd,因为在“管理员方”模式下,功能可以通过以下方式正常工作:
createDatabase("http://127.0.0.1/","myDataBase");
答案 0 :(得分:4)
我遇到了同样的问题 - >您必须在标头中使用HTTP身份验证。 因此,只需将此标题行添加到您的请求中:
private static void setHeader(HttpRequestBase request) {
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
request.setHeader("Authorization", "Basic base64(username:password)");
}
请记住,您必须使用base64对短语“username:password”进行编码。 这看起来像这样:
request.setHeader("Authorization", "Basic 39jdlf9udflkjJKDKeuoijdfoier");
答案 1 :(得分:0)
您可以查看this blogpost on libcouch-android。它有一些很好的功能,真正支持使用CouchDB进行Android开发。例如,自动为应用程序创建数据库和密码,因此用户可以透明地使用CouchDB(如果需要)。
此外,它还提供对CouchDB的RPC方法的访问,因此您可以从应用程序的生命周期中启动和停止数据库。
关于安全性,我刚才在this thread中总结了这一点。