Java Grooveshark api始终返回;“未找到方法”;消息

Java Grooveshark api始终返回;“未找到方法”;消息,java,api,http,grooveshark,Java,Api,Http,Grooveshark,我试图用grooveshark启动一个简单的会话,并使用sendPostReq函数调用StartSessionAPI。我一直从grooveshark得到以下回应 {"errors":[{"code":2,"message":"Method not found."}]} 我们使用GrooveSharkAPI的方式是我们拥有有效负载(在我的例子中是grooveSharkjson),我们使用密钥生成一个md5哈希,并将该json发布到这个url{md5 hash of payload}。这是正确的程

我试图用grooveshark启动一个简单的会话,并使用sendPostReq函数调用StartSessionAPI。我一直从grooveshark得到以下回应

{"errors":[{"code":2,"message":"Method not found."}]}
我们使用GrooveSharkAPI的方式是我们拥有有效负载(在我的例子中是grooveSharkjson),我们使用密钥生成一个md5哈希,并将该json发布到这个url{md5 hash of payload}。这是正确的程序吗

下面还提供了sendPostReq函数和用于生成md5哈希的代码

public static void sendPostReq() throws Exception{

    String grooveSharkjson = "{'method':'startSession','header':{'wsKey':'wskey'}}";

    String key = "secret"; // Your api key.
    String sig = SecurityHelper.getHmacMD5(grooveSharkjson, key);

    URL url = new URL("https://api.grooveshark.com/ws3.php?sig=" + sig);
    URLConnection connection = url.openConnection();
    connection.setDoInput(true);
    connection.setDoOutput(true);

    connection.connect();

    OutputStream os = connection.getOutputStream();
    PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));
    pw.write(grooveSharkjson);
    pw.close();

    InputStream is = connection.getInputStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    String line = null;
    StringBuffer sb = new StringBuffer();
    while ((line = reader.readLine()) != null) {
        sb.append(line);
    }
    is.close();
    String response = sb.toString();
    System.out.println(response);

}

public static String getHmacMD5(String payload, String secret) {
    String sEncodedString = null;
    try {
       SecretKeySpec key = new SecretKeySpec((secret).getBytes("UTF-8"), "HmacMD5");
       Mac mac = Mac.getInstance("HmacMD5");
       mac.init(key);

       byte[] bytes = mac.doFinal(payload.getBytes("UTF-8"));

       StringBuffer hash = new StringBuffer();

       for (int i=0; i<bytes.length; i++) {
          String hex = Integer.toHexString(0xFF &  bytes[i]);
          if (hex.length() == 1) {
              hash.append('0');
          }
              hash.append(hex);
          }
          sEncodedString = hash.toString();
       }
       catch (UnsupportedEncodingException e) {}
       catch(InvalidKeyException e){}
       catch (NoSuchAlgorithmException e) {}

       return sEncodedString ;
}
public static void sendPostReq()引发异常{
字符串grooveSharkjson=“{'method':'startSession','header':{'wsKey':'wsKey'}}”;
String key=“secret”//您的api密钥。
字符串sig=SecurityHelper.getHmacMD5(grooveSharkjson,key);
URL=新URL(“https://api.grooveshark.com/ws3.php?sig=“+sig);
URLConnection=url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(真);
connection.connect();
OutputStream os=connection.getOutputStream();
PrintWriter pw=新的PrintWriter(新的OutputStreamWriter(os));
write(grooveSharkjson);
关闭();
InputStream is=connection.getInputStream();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is));
字符串行=null;
StringBuffer sb=新的StringBuffer();
而((line=reader.readLine())!=null){
某人附加(行);
}
is.close();
字符串响应=sb.toString();
System.out.println(响应);
}
公共静态字符串getHmacMD5(字符串有效负载,字符串机密){
字符串sEncodedString=null;
试一试{
SecretKeySpec key=newsecretKeyspec((secret).getBytes(“UTF-8”),“HmacMD5”);
Mac Mac=Mac.getInstance(“HmacMD5”);
mac.init(密钥);
byte[]bytes=mac.doFinal(payload.getBytes(“UTF-8”);
StringBuffer哈希=新的StringBuffer();

对于(int i=0;i我知道我在20分钟前发布了这个问题,但我刚刚找到了解决方案。json字符串有一个问题,特别是我生成它的方式。应该这样生成它

    String grooveSharkjson = "{\"method\":\"startSession\",\"header\":{\"wsKey\":\"wsKey\"},\"parameters\":[]}";

我没想到解决方案会如此明显,但这正是我了解如何解决问题的原因——我在他们的沙箱()上测试了我的密钥和机密,并仔细检查了hmac md5签名。

你成功地让它工作了吗?我尝试使用你的代码,我得到“你的web服务密钥无法访问调用的方法”错误。:/噢,我想没关系,您没有在grooveSharkjson中指定第二个“wsKey”应该是我的密钥和字符串密钥。我应该写我的秘密。新手错误。无论如何谢谢!你是否包含任何jar文件。对我来说,它在SecurityHelper中给出了错误。我是java新手。你能帮我@user1386101 SecurityHelper的类文件在哪里?这是我创建的一个helper类。这里是指向该文件的链接