Как отправить 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);
Вы, вероятно, захотите проверить, как вы создаете содержание своего поста. Вышесказанное просто для того, чтобы проверить, действительно ли проблема связана с типом контента.
Дайте нам знать о результате.