Никак не могу добиться JSON ответа от сервера OnlyOffice, приходит plain/text, всю голову сломал, использую async-http:1.4.9 client.
https://api.onlyoffice.com/portals/auth
String url = "https://biojack.onlyoffice.com/post/api/2.0/authentication.json";
RequestParams params = new RequestParams();
params.setUseJsonStreamer(true);
params.put("userName", "мой емейл-логин");
params.put("password", "мой пароль");
AsyncHttpClient client = new AsyncHttpClient();
// client.setBasicAuth("емейл", "пароль"); вот так работает, но не возвращает json :(
client.addHeader("content-type", "application/json");
client.addHeader("accept", "application/json");
PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
client.setCookieStore(myCookieStore);
client.get(appContext, url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
Log.d(TAG, "onSuccess: ");
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.d(TAG, "onFailure: ");
}
});
с client.post вообще не работает, возвращает Location: https://www.onlyoffice.com/wrongportalname.aspx?url=biojack.onlyoffice.com
а client.get возвращает не json и не отдает токен, хотя страничка грузится в чистом тексте, будто я залогинился.
Можно сделать через asyncTask и всё заработает, но не хочу, хотел через готовую библиотеку...
Если использовать client.get(appContext, url, params, new JsonHttpResponseHandler()... , то приходит ответ org.json.JSONException: Response cannot be parsed as JSON data так как там html страничка прилетает.
Как я понимаю документацию, там написано, что POST запрос надо отправлять на
String url = "https://biojack.onlyoffice.com/api/2.0/authentication.json";
В остальном все выглядит верно.
Уф, два дня и разрыв мозга, оказалось надо не на .com стучать, а на .eu (это я в настройках личного кабинета подсмотрел где мой поддомен расположен), плюс параметры запроса тоже в json должны быть :(
void loginProcess(String loginEmailText, String passwordText, String portalName) {
String url = "https://biojack.onlyoffice.eu/api/2.0/authentication.json";
JSONObject jsonParams = new JSONObject();
StringEntity entity = null;
try {
jsonParams.put("userName", "мой емейл");
jsonParams.put("password", "мой пароль");
entity = new StringEntity(jsonParams.toString());
entity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, String.valueOf(ContentType.APPLICATION_JSON)));
} catch (JSONException | UnsupportedEncodingException | NullPointerException e) {
e.printStackTrace();
}
AsyncHttpClient client = new AsyncHttpClient();
// вот эти две строки тут не особо и нужны, так как тип контента я указываю в запросе, но пусть будут
client.addHeader("Content-Type", String.valueOf(ContentType.APPLICATION_JSON));
client.addHeader("Accept", String.valueOf(ContentType.APPLICATION_JSON));
PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
client.setCookieStore(myCookieStore);
client.post(getApplicationContext(), url, entity, String.valueOf(ContentType.APPLICATION_JSON), new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
super.onSuccess(statusCode, headers, response);
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
super.onSuccess(statusCode, headers, response);
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
super.onFailure(statusCode, headers, responseString, throwable);
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
super.onSuccess(statusCode, headers, responseString);
}
@Override
protected Object parseResponse(byte[] responseBody) throws JSONException {
return super.parseResponse(responseBody);
}
});
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Игра отрисовывается в canvas, для удобства есть кнопка сделать на весь экран