В настоящее время я пытаюсь взаимодействовать с Tidal API, и у меня возникли некоторые проблемы. Вот мой код, я использую библиотеку залпов:
JSONObject pload = new JSONObject();
try {
pload.put("username", username);
pload.put("password", password);
} catch (JSONException e) {
e.printStackTrace();
}
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, ENDPOINT, pload, response->{
Gson gson = new Gson();
JSONArray data = response.optJSONArray("data");
Log.d("RESPONSE", response.toString());
}, error -> {
String responseBody = null;
try {
responseBody = new String(error.networkResponse.data, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Log.d("ERROR", responseBody);
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
headers.put("X-Tidal-Token", "q--------------------------k");
headers.put("Content-Type", "application/json");
return headers;
}
};
mqueue.add(request);
LogCat:
D/REQUEST: body: {"username":"b-------@gmail.com","password":"p------"} ___ headers: {X-Tidal-Token=q---------------k, Content-Type=application/json} ___ request.tostring: [ ] https://api.tidalhifi.com/v1/login/username 0xcc20303d NORMAL null
E/Volley: [309] BasicNetwork.performRequest: Unexpected response code 400 for https://api.tidalhifi.com/v1/login/username
D/ERROR: {"status":400,"subStatus":1002,"userMessage":"password cannot be blank,username cannot be blank"}
Как вы видите, полезная нагрузка не пуста, поэтому я немного запутался. У Tidal нет официального API, но есть несколько неофициальных оболочек, которые я использовал для справки, вот несколько примеров используемого кода:
Javascript:
request({
method: 'POST',
uri: '/login/username?token=kgsOOmYk3zShYrNP',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
form: {
username: authInfo.username,
password: authInfo.password,
}
Java:
var url = baseUrl.newBuilder()
.addPathSegment("login")
.addPathSegment("username")
.build();
var body = new FormBody.Builder()
.add("username", username)
.add("password", password)
.build();
var req = new Request.Builder()
.url(url)
.post(body)
.header(TOKEN_HEADER, token)
.build();
Java еще раз:
HttpResponse<JsonNode> jsonResponse = restHelper.executeRequest(Unirest.post(API_URL + "login/username")
.header("X-Tidal-Token", "wdgaB1CilGA-S_s2")
.field("username", username)
.field("password", password));
При необходимости я могу опубликовать ссылки на все оболочки и предоставить приливный токен для тестирования (его довольно легко приобрести вам просто нужно прослушать пакет из приложения Tidal Desktop). Я попытался переопределить getParams (), но это не сработало. Любая помощь приветствуется!