首页 > 解决方案 > 使用 REST API 和 Java Jersey 应用程序在 Wordpress 上发布帖子

问题描述

我正在尝试使用 Jersey WebResource 对象在 Wordpress 网站上发布帖子。Wordpress 站点和 Java 应用程序都是本地的。我正在尝试这个:

    String url = "http://localhost:81/testsite/wp-json/wp/v2/posts";
    String myPostData = "{'title':'test','content':'bla bla bla'}";

    Client client = Client.create();
    WebResource webResource = client.resource(url);
    webResource.header(HttpHeaders.AUTHORIZATION, "Basic XXXXXX"); //XXXXXX is the encoded user:password
    webResource.header(HttpHeaders.CONTENT_TYPE, "application/json");
    webResource.accept(MediaType.APPLICATION_JSON);

    ClientResponse response = webResource.post(ClientResponse.class, myPostData);

我得到了回应:

POST http://localhost:81/testsite/wp-json/wp/v2/posts返回响应状态为 401 Unauthorized

使用 Postman 时,我能够成功发布。

在此处输入图像描述

我究竟做错了什么?

标签: javawordpressrestjersey

解决方案


WebResource.header()返回一个新的WebResource.Builder. 所以当你在做

WebResource webResource = client.resource(url);
webResource.header(HttpHeaders.AUTHORIZATION, "Basic XXXXXX");

在第二行中,您正在创建一个新的WebResource.Builder并且什么都不做。所以发生的事情是标题永远不会在您调用post()原始文件时设置,WebResource而不是WebResource.Builder您设置的标题。

您可以将header()调用分配给WebResource.Builder变量并在其上调用方法也可以将调用链接起来。

WebResource webResource = client.resource(url);
WebResource.Builder builder = webResource.header(HttpHeaders.AUTHORIZATION, "Basic XXXXXX");
builder.header(HttpHeaders.CONTENT_TYPE, "application/json");
builder.accept(MediaType.APPLICATION_JSON);
ClientResponse response = builder.post(ClientResponse.class, myPostData);

或者全部链接

ClientResponse response = client.resource(url)
        .header(HttpHeaders.AUTHORIZATION, "Basic XXXXXX")
        .header(HttpHeaders.CONTENT_TYPE, "application/json")
        .accept(MediaType.APPLICATION_JSON)
        .post(ClientResponse.class, myPostData);

推荐阅读