如何在 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 的内容。以上仅供您检查问题是否确实与内容类型有关。

让我们知道结果。