我尝试向公共https://网络服务发送POST请求。 这是我的代码段:
static void xPostJsonUsingHttpClient()
throws ClientProtocolException, IOException {
CloseableHttpClient client = HttpClients.createDefault();
String anafURL =
"https://webservicesp.anaf.ro/PlatitorTvaRest/api/v2/ws/tva";
HttpPost httpPost = new HttpPost(anafURL);
String json = "[{\"cui\":19,\"data\":\"2017-11-07\"}]";
StringEntity entity = new StringEntity(json,"UTF-8");
entity.setContentType("application/json");
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-Type", "application/json");
httpPost.setEntity(entity);
CloseableHttpResponse response = client.execute(httpPost);
System.out.println(response);
client.close();
}
成为https://地址我不知道,我必须改变什么? Postman或SoapUI可以正常使用它。
当我运行我的代码时,它会以错误终止: javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径
我是否需要下载公钥或者我必须进行一些其他设置?
谢谢
答案 0 :(得分:0)
猜测但我相信您的JVM无法识别此Web服务器使用的证书的CA.我不久前遇到了同样的问题,以下是有帮助的:
您尝试连接的网址,使用" certsign.net"作为证书颁发机构
之后你应该可以连接。如果不让我知道。
答案 1 :(得分:0)
您可以使用基于apache http api构建的http-request。
rivate static final HttpRequest<?> HTTP_REQUEST =
HttpRequestBuilder.createPost("https://webservicesp.anaf.ro/PlatitorTvaRest/api/v2/ws/tva")
.trustAllCertificates()
.trustAllHosts()
.addDefaultHeader(ACCEPT, APPLICATION_JSON.getMimeType())
.addContentType(APPLICATION_JSON)
.build();
@Test
public void test() {
ResponseHandler<?> responseHandler =
HTTP_REQUEST.executeWithBody("[{\"cui\":19,\"data\":\"2017-11-07\"}]");
assertEquals(SC_OK, responseHandler.getStatusCode());
}
状态代码没问题。如果要获取响应正文,可以使用String
或sometype而不是通配符类型。请参阅文档。