【问题标题】:Send HTTP Post Payload with Java使用 Java 发送 HTTP Post Payload
【发布时间】:2012-11-19 18:03:17
【问题描述】:

我正在尝试连接到grooveshark API,这是http请求

POST URL
http://api.grooveshark.com/ws3.php?sig=f699614eba23b4b528cb830305a9fc77
POST payload
{"method":'addUserFavoriteSong",'parameters":{"songID":30547543},"header": 
{"wsKey":'key","sessionID":'df8fec35811a6b240808563d9f72fa2'}}

我的问题是如何通过 Java 发送此请求?

【问题讨论】:

    标签: java httprequest payload grooveshark


    【解决方案1】:

    基本上,您可以使用标准 Java API 来完成。查看URLURLConnection,也许还有HttpURLConnection。它们在包装java.net 中。

    关于 API 特定的签名,请尝试在 here. 中找到的 sStringToHMACMD5

    记得更改您的 API 密钥,这非常重要,因为每个人都知道。

    String payload = "{\"method\": \"addUserFavoriteSong\", ....}";
    String key = ""; // Your api key.
    String sig = sStringToHMACMD5(payload, key);
    
    URL url = new URL("http://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(payload);
    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();
    

    【讨论】:

    • 是的,它可以而且应该是String,在这种情况下我们使用PrintWriter
    • 我这样做了,但得到了同样的错误“方法未定义”,我定义了 String data = "{'method': 'addUserFavoriteSong', 'parameters': {'songID': 0}, ' header': {'wsKey': 'key', 'sessionID': 'sessionID'}}";
    • API 文档是否提到了有关 HTTP 请求的任何具体内容?就像标题应该是什么一样,例如“内容类型”?
    • 顺便说一句,标准 JSON 数据应始终使用双引号 " 来表示键和字符串文字。
    • 非常感谢,将 ' 替换为 \" 并且不再出现错误。但获取签名错误:String data = "{\"method\":\"getArtistSearchResults\",\ "参数\":{\"查询\":\"adele\"},\"标题\":{\"wsKey\":\"concertboom\",\"sessionID\":\"0\"} }"; String key = "b07cd9d001e6895956023687e4629f60"; 字符串签名 = hash(key, data);
    【解决方案2】:

    您可以查看Commons HttpClient 包。

    创建POST's 是相当简单的,特别是您可以复制此处找到的代码:http://hc.apache.org/httpclient-3.x/methods/post.html:

    PostMethod post = new PostMethod( "http://api.grooveshark.com/ws3.php?sig=f699614eba23b4b528cb830305a9fc77" );
    NameValuePair[] data = {
        new NameValuePair( "method", "addUserFavoriteSong..." ),
        ...
    };
    post.setRequestBody(data);
    InputStream in = post.getResponseBodyAsStream();
    ...
    

    干杯,

    【讨论】:

    • HttpClient 4.2.2 中不存在 PostMethod
    • 您会注意到该链接适用于 3.x 版本。我很确定 4.2.2 中存在类似的东西,无论如何,在其他人的指导下,您应该自己提供一些工作:-) 干杯
    猜你喜欢
    • 2018-07-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多