我正在尝试使用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时,我可以成功发布。
我在做什么错了?
答案 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);