Как создать базу данных в CouchDB с указанием имени пользователя и пароля - PullRequest
4 голосов
/ 12 апреля 2011

Я создаю приложение для Android, которое хранит данные в CouchDB, и мне нужно создать базу данных из приложения для Android.Мне нужно выполнить команду "curl-X PUT http://user:passwd@127.0.0.1:5984/myDataBase" с помощью методов Java.

Я реализовал следующие функции:

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, потому что в режиме "admin party" функция отлично работает, вызывая:

createDatabase("http://127.0.0.1/","myDataBase");

Ответы [ 2 ]

4 голосов
/ 13 апреля 2011

У меня была такая же проблема -> вы должны использовать 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)");
}

Имейте в виду, что вы должны закодировать фразу "username: password" с base64. это выглядит примерно так:

request.setHeader("Authorization", "Basic 39jdlf9udflkjJKDKeuoijdfoier");
0 голосов
/ 16 апреля 2011

Вы можете взглянуть на этот пост на libcouch-android . Он имеет несколько приятных функций, которые действительно поддерживают разработку Android с CouchDB. Например, автоматическое создание баз данных и паролей для приложений, чтобы пользователи могли прозрачно использовать CouchDB (при желании).

Кроме того, он предлагает доступ к RPC-методам CouchDB, так что вы можете запускать и останавливать БД из жизненных циклов вашего приложения.

Что касается безопасности, я просто суммировал это здесь в этой теме .

...