如何将此cUrl命令转换为包含表单和二进制数据的Java

时间:2018-09-06 06:45:56

标签: java curl

我正在使用一个API,我想在我的Java项目中使用它,当我测试它时,他们给出了curl的示例,它工作正常,没有问题并返回结果。
问题是如何将这段代码转换为Java 这是我在cUrl中拥有的命令。

curl --form text='apple' --form user_audio_file=@D:/apple.wav "https://api.speechace.co/api/scoring/text/v0.1/json?key=mykey&dialect=en-us" | python -m json.tool

我尝试使用的Java代码。

String Url = "https://api.speechace.co/api/scoring/text/v0.1/json";
String key = "my  key";
String dialect = "en-us";
String user_id = "81ozow";
Url += "?" + "key=" + key + "&dialect=" + dialect + "&user_id=" + user_id;

File file = new File("D:/apple.wav");
byte[] postData = new byte[(int) file.length()];
DataInputStream dis = new DataInputStream(new FileInputStream(file));
dis.readFully(postData);
dis.close();

String request = Url;
URL url = new URL(request);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
//conn.addRequestProperty("text", "'apple'");
//conn.addRequestProperty("user_audio_file", "D:/apple.wav");
try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) {
    wr.write("text='apple'".getBytes());
    wr.flush();
    wr.write("user_audio_file=".getBytes());
    wr.write(postData);
    wr.flush();
} catch (Exception e) {
    out.println(conn.getErrorStream().toString());
    e.printStackTrace();
}
out.println("Done upload data");
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
String result = "";
while ((line = rd.readLine()) != null) {
    result += line;
}
rd.close();
out.println(result);

但是当我使用此代码时,结果是服务器发了错误,因此如何将cUrl代码转换为java,我使用了许多API,在此之前以cUrl命令为例,这是我第一次遇到这种情况问题,我以前从未使用过--form| python -m json这样的命令,我该如何用Java编写它们。
我已经看到很多curls命令,并且能够将其转换,所以任何帮助我该怎么做。

0 个答案:

没有答案