У меня возникла проблема с получением информации от Cloudant.com с использованием ключа/прохода с разрешениями на чтение (или всеми разрешениями). Я получал 500 ошибок в любом случае, я бы настроить этого пользователя. Однако в настоящее время все работает нормально, но я оставил себя открытым для взлома, так как я должен открыть свою базу для чтения всем. И все мы знаем, что это может быть проблемой. Мне было интересно, есть ли у кого-нибудь представление о том, почему эта проблема происходит. BTW, я попробовал это в приложениях для Android и iOS. В этом текущем вопросе используются примеры из приложения для Android.Разрешения для Cloudant/CouchDB на Key/Pass не работают
Вот критерии из моих одноточечной Утопия:
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 и значения того, что я ищу, и мимо того, что в браузере, все работало нормально (да, вышло из моей учетной записи).
EDIT: Исправление, когда я вставляю его в браузер, он запрашивает мои учетные данные и с помощью ключа/пароля заставляет его работать. Я попросил разработчика Cloudant задать этот вопрос в StackOverflow, потому что они были не уверены в том, что происходит (у них также было все мое приложение с учетными данными ключа/пароля и т. Д.).
Спасибо тонну.Ты поставил меня на путь, который в конечном итоге дал мне ответ. Ура! – AlienDev