Как отправить почтовый http-запрос в java для аудио wit.ai

Я должен отправить волновой файл на wit.ai, используя вызов http api. В документации они показали exaple, используя curl

$ curl -XPOST 'https://api.wit.ai/speech?v=20141022' \
   -i -L \
   -H "Authorization: Bearer $TOKEN" \
   -H "Content-Type: audio/wav" \
   --data-binary "@sample.wav"

Я использую java, и я должен отправить этот запрос с помощью java, но я не могу правильно преобразовать этот запрос curl в java. я не могу понять, что такое -i и -l, а также как установить двоичные данные в почтовом запросе java.

Это то, что я сделал до сих пор

public static void main(String args[])
{
    String url = "https://api.wit.ai/speech";
    String key = "token";

    String param1 = "20170203";
    String param2 = command;
    String charset = "UTF-8";

    String query = String.format("v=%s",
            URLEncoder.encode(param1, charset));


    URLConnection connection = new URL(url + "?" + query).openConnection();
    connection.setRequestProperty ("Authorization","Bearer"+ key);
    connection.setRequestProperty("Content-Type", "audio/wav");
    InputStream response = connection.getInputStream();
    System.out.println( response.toString());
}

person Sunil Kumar    schedule 04.02.2017    source источник
comment
У вас должно быть базовое представление о сетевых технологиях Java, docs.oracle.com/ javase/tutorial/networking/urls/ — хорошая отправная точка.   -  person Jerry Chin    schedule 04.02.2017
comment
@jerry Chin у меня есть, но я запутался и получаю сообщение об ошибке, я не профессионал, можете ли вы преобразовать это ?? пожалуйста помоги   -  person Sunil Kumar    schedule 04.02.2017
comment
не могли бы вы опубликовать ошибку и что вы сделали?   -  person Jerry Chin    schedule 04.02.2017


Ответы (1)


Вот как записать sample.wav в выходной поток вашего подключения, обратите внимание, что между Bearer и token есть пробел, который исправлен в следующем фрагменте:

public static void main(String[] args) throws Exception {
    String url = "https://api.wit.ai/speech";
    String key = "token";

    String param1 = "20170203";
    String param2 = "command";
    String charset = "UTF-8";

    String query = String.format("v=%s",
            URLEncoder.encode(param1, charset));


    URLConnection connection = new URL(url + "?" + query).openConnection();
    connection.setRequestProperty ("Authorization","Bearer " + key);
    connection.setRequestProperty("Content-Type", "audio/wav");
    connection.setDoOutput(true);
    OutputStream outputStream = connection.getOutputStream();
    FileChannel fileChannel = new FileInputStream(path to sample.wav).getChannel();
    ByteBuffer byteBuffer = ByteBuffer.allocate(1024);

    while((fileChannel.read(byteBuffer)) != -1) {
        byteBuffer.flip();
        byte[] b = new byte[byteBuffer.remaining()];
        byteBuffer.get(b);
        outputStream.write(b);
        byteBuffer.clear();
    }

    BufferedReader response = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    String line;
    while((line = response.readLine()) != null) {
        System.out.println(line);
    }
}

PS: я успешно протестировал приведенный выше код, он работает как шарм.

person Jerry Chin    schedule 04.02.2017
comment
Спасибо за столь необходимую помощь. Но все же можете ли вы объяснить мне, что такое -i и -L в curl? - person Sunil Kumar; 04.02.2017
comment
-i включает заголовки в вывод; -L повторит запрос, если запрошенная страница переместилась в новое место. Вам лучше проверить linux.die.net/man/1/curl, если нужно подробнее. - person Jerry Chin; 05.02.2017