如何在 Java 中向 Octoprint 发送 POST 请求?
How to send a POST Request to Octoprint in Java?
我想通过 Apache HttpClient 向 Octoprint API 发送一个 POST 请求,如下所示:http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command(例如开始工作)。我已经阅读了两者的文档,但仍然得到 "Bad Request" 作为答案。
尝试了其他几个 Post 请求,但从未得到其他东西。猜猜我把请求写错了。
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());
可能内容类型有误。根据文档 here,预计主体采用 JSON 格式。另一方面,您的代码根据这段代码 post.setEntity(new UrlEncodedFormEntity(content));
使用 application/x-www-form-urlencoded
快速修复,进行以下更改并尝试:
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);
您可能想要查看如何创建 post 的内容。以上仅供您检查问题是否确实与内容类型有关。
让我们知道结果。
我想通过 Apache HttpClient 向 Octoprint API 发送一个 POST 请求,如下所示:http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command(例如开始工作)。我已经阅读了两者的文档,但仍然得到 "Bad Request" 作为答案。
尝试了其他几个 Post 请求,但从未得到其他东西。猜猜我把请求写错了。
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());
可能内容类型有误。根据文档 here,预计主体采用 JSON 格式。另一方面,您的代码根据这段代码 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);
您可能想要查看如何创建 post 的内容。以上仅供您检查问题是否确实与内容类型有关。
让我们知道结果。