1

我想通过 Apache HttpClient 向 Octoprint API 发送一个 POST 请求,如下所示:http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command 例如开始工作)。我已经阅读了两者的文档,但仍然得到“错误请求”作为答案。

尝试了其他几个发布请求,但从未得到其他东西。猜猜我以某种方式写错了请求。

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());
4

1 回答 1

0

内容类型可能有误。根据此处的文档,期望正文采用 JSON 格式。另一方面,您的代码根据这段代码使用 application/x-www-form-urlencodedpost.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);

您可能想要查看您是如何创建帖子内容的。以上只是为了检查问题是否确实与内容类型有关。

让我们知道结果。

于 2019-07-25T17:56:57.420 回答