如何在CouchDB中创建一个指示用户名和密码的数据库

时间:2011-04-12 14:30:13

标签: android curl couchdb couchdb-futon

我正在创建一个在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");

2 个答案:

答案 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中总结了这一点。