2011-04-12 66 views
4

我正在创建一个将数据存储在CouchDB中的android应用程序,我需要从android应用程序创建一个数据库。我需要用java方法执行命令“curl-X PUT http://user:[email protected]:5984/myDataBase”。如何在CouchDB中创建一个数据库,指示用户名和密码

我已实现了以下功能:

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:[email protected]/","myDataBase"); 

但目前还没有结果。我认为这个问题是在用户:passwd文件,因为“管理方”模式funcion工作正常调用由:

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

对android应用程序环境不太熟悉,但只是为了偏执你尝试了终端上的实际curl命令,要100%确定你使用的用户:passwd是正确的? – rossdavidh 2011-04-12 18:32:30

回答

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。 这看起来是这样的:

request.setHeader("Authorization", "Basic 39jdlf9udflkjJKDKeuoijdfoier"); 
0

你可以看看this blogpost on libcouch-android。它有一些很好的功能,真正支持使用CouchDB进行Android开发。例如,为应用程序自动创建数据库和密码,因此用户可以透明地使用CouchDB(如果需要)。

此外,它提供对CouchDB的RPC方法的访问,因此您可以从应用程序的生命周期中启动和停止数据库。

关于安全性,我只是在这里总结了这里的this thread

相关问题