Как отправить POST-запрос в Octoprint на Java?

Я хочу отправить POST-запрос к API Octoprint через Apache HttpClient, как показано здесь: http://docs.octoprint.org/en/master/api/job.html (например, начать работу). Я прочитал документы обоих, но все еще получаю "Bad Request" в качестве ответа.

Пробовал несколько других почтовых запросов, но больше ничего не получал. Думаю, я как-то неправильно пишу запрос.

CloseableHttpClient posterClient = HttpClients.createDefault();
        HttpPost post = new HttpPost("http://localhost:5000/api/job");
        post.setHeader("Host", "http://localhost:5000");
        post.setHeader("Content-type", "application/json");

        post.setHeader("X-Api-Key", "020368233D624EEE8029991AE80A729B");

        List<NameValuePair> content = new ArrayList<NameValuePair>();
        content.add(new BasicNameValuePair("command", "start"));



        post.setEntity(new UrlEncodedFormEntity(content));
        CloseableHttpResponse answer = posterClient.execute(post);

        System.out.println(answer.getStatusLine());

1 ответ

Решение

Вероятно, тип контента неправильный. В соответствии с документацией ожидайте, что тела будут в формате JSON. С другой стороны, ваш код использует application/x-www-form-urlencoded согласно этому коду post.setEntity(new UrlEncodedFormEntity(content));

Быстрое исправление, внесите следующие изменения и попробуйте:

    String json= "{\"command\":\"start\"}";

    //This will change change you BasicNameValuePair to an Entity with the correct Content Type
    StringEntity entity = new StringEntity(json,ContentType.APPLICATION_JSON);
    //Now you just set it to the body of your post
    post.setEntity(entity);

Вы, вероятно, захотите проверить, как вы создаете содержание своего поста. Вышесказанное просто для того, чтобы проверить, действительно ли проблема связана с типом контента.

Дайте нам знать о результате.

Другие вопросы по тегам