我一直在尝试在我的Android应用中构建LastFM scrobbler。为此,我需要先获取用户的会话密钥,我正在使用 auth.getMobileSession 。
但我总是得到错误:
Invalid parameters - Your request is missing a required parameter
答案 0 :(得分:0)
我遇到了同样的问题,终于找到了解决方案。
我使用okhttp3库发送请求,因此您需要将此依赖项添加到build.gradle:
compile 'com.squareup.okhttp3:okhttp:3.9.0'
这是我的工作代码
String api_key = // your api key
String api_sig = // your api sig
String username = // username you want to log in
String password = // user password
String apiSignature = "api_key" + api_key + "methodauth.getMobileSessionpassword" + password + "username" + username + api_sig;
StringBuilder hexString = new StringBuilder();
try {
MessageDigest md5Encrypter = MessageDigest.getInstance("MD5");
// Create MD5 Hash
MessageDigest digest = java.security.MessageDigest
.getInstance("MD5");
digest.update(apiSignature.getBytes("UTF-8"));
byte messageDigest[] = digest.digest();
// Create Hex String
for (byte aMessageDigest : messageDigest) {
String h = Integer.toHexString(0xFF & aMessageDigest);
while (h.length() < 2)
h = "0" + h;
hexString.append(h);
}
String urlParameter = "method=auth.getMobileSession&api_key=" + api_key + "&password=" + password + "&username=" + username + "&api_sig=" + hexString;
Request request = new Request.Builder()
.url("https://ws.audioscrobbler.com/2.0/?" + urlParameter).post(RequestBody.create(null, new byte[0])).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
String test = responseBody.string(); // your .xml with the session id, see https://www.last.fm/api/show/auth.getSession
if (!response.isSuccessful())
throw new IOException("Unexpected code " + response);
}
}
});
} catch (Exception ex) {
System.out.println(ex.toString());
}
答案 1 :(得分:0)
我也在努力解决这个问题,我终于找到了原因。
在HTTP POST请求中,参数将在请求正文中发送,如此问题中所述: How are parameters sent in an HTTP POST request?
我在请求正文中提出的是:
?api_key=xxxxxxxxxx&method=Auth.getMobileSession&password=xxxxxxxxxx&username=HyperQuantum&api_sig=xxxxxxxxxx
你看到错误吗?
开头的问号不应该在那里。我确保删除它,之后问题得到解决。
我正在使用Qt并使用QUrl.toEncoded()来获取请求的编码参数,但它也会生成一个在这种情况下无用的问号。
答案 2 :(得分:0)
好像您要使用LastFM API一样,您无需关心getMobileSession()等的指令。
无需创建任何会话,只需使用API_KEY发送请求即可正常工作。