我在使用具有读取权限(或所有权限)的密钥/通行证从 Cloudant.com 获取信息时遇到问题。我以任何方式设置此用户都收到 500 错误。但是,目前一切正常,但我让自己对黑客开放,因为我必须打开我的数据库以供所有人阅读。我们都知道这可能是个问题。我想知道是否有人对为什么会发生这个问题有任何见解。顺便说一句,我已经在 Android 和 iOS 应用程序中尝试过。当前的问题是使用 Android 应用程序中的示例。
这是我单身乌托邦的标准:
private static String _remote_db_protocal = "https";
private static String _remote_db_key = "mykey";
private static String _remote_db_pass = "mypass";
private static String _remote_db_account = "myaccount";
private static String _remote_db_dbname = "mydbname";
public static String REMOTE_JSON_DB_URL = _remote_db_protocal+"://"+
_remote_db_key+":"+_remote_db_pass+"@"+
_remote_db_account+".cloudant.com/"+_remote_db_dbname;
这是我发送以获取 URL 字符串响应的信息:
private static String dbBaseURL = Utopia.REMOTE_JSON_DB_URL;
....
String dbQueryURL = "/_design/app/_view/toys";
URL finalURL;
try {
finalURL = new URL(dbBaseURL + dbQueryURL);
Log.i(TAG, "Getting URL: "+finalURL.toString());
response = WebStuff.getURLStringResponse(finalURL);
....
最后,这是我的 getURLStringResponse() 函数:
/*
* Get information back from a URL
*/
public static String getURLStringResponse(URL url)
{
String response = "";
try {
URLConnection conn = url.openConnection();
BufferedInputStream bin = new BufferedInputStream(conn.getInputStream());
byte[] contentBytes = new byte[1024];
int bytesRead = 0;
StringBuffer responseBuffer = new StringBuffer();
while ((bytesRead = bin.read(contentBytes)) != -1)
{
response = new String(contentBytes, 0, bytesRead);
responseBuffer.append(response);
}
return responseBuffer.toString();
} catch (Exception e) {
// TODO: handle exception
Log.e(TAG, "getURLStringResponse Error as Follows");
Log.e(TAG, e.toString());
}
return response;
}
所以有了以上所有,我希望有人能回答这个问题。我还必须注意,我将从在日志中某处吐出的查询中获取我的确切 URL,或者只是从 REMOTE_JSON_DB_URL 变量和我正在寻找的值重新创建它,然后将其传递到浏览器中,一切正常(是的,正在注销我的帐户)。
编辑:更正,当我将其粘贴到浏览器中时,它会询问我的登录凭据并使用密钥/密码使其工作。Cloudant 开发人员要求我向 StackOverflow 提出这个问题,因为他们不确定发生了什么(他们还让我的整个应用程序带有密钥/通行证凭据等等)。