使用REST API和Java Jersey应用程序在Wordpress上发布文章

时间:2018-10-16 19:52:57

标签: java wordpress rest jersey

我正在尝试使用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未经授权

使用Postman时,我可以成功发布。

enter image description here

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

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

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

在第二行中,您正在创建一个新的WebResource.Builder,并且对此不进行任何操作。因此,发生的事情是永远不会设置标头,因为您在原始post()上调用WebResource而不是在标头上设置的WebResource.Builder上。

您可以将header()调用分配给WebResource.Builder变量并在 that 上调用方法,也可以只链接这些调用。

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