在一次项目中,有一个功能必须使用post请求并且还要basic auth认证。于是就找有关文章,然后找到了一篇比较易懂的文章,但是该文章没有设置请求头的功能于是我在原有的基础上添加了设置请求头的共能。原文链接
public static String doPost(String url, String username, String password, Map<String, Object> params, Map<String, Object> headers) {
// 转换请求参数
String jsonPrarms = JSON.toJSONString(params);
CloseableHttpClient httpClient = HttpClientBuilder.create().build(); //获取浏览器信息
HttpPost httpPost = new HttpPost(url);
String encoding = null; //username password 自行修改 中间":"不可少
try {
encoding = DatatypeConverter.printBase64Binary((username+":"+password).getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
httpPost.setHeader("Authorization", "Basic " + encoding);
// 设置请求头
if (headers != null) {
for (Map.Entry<String, Object> param : headers.entrySet()) {
httpPost.addHeader(param.getKey(), String.valueOf(param.getValue()));
}
}
HttpEntity entityParam = new StringEntity(jsonPrarms, ContentType.create("application/json", "UTF-8")); //这里的“application/json” 可以更换因为本人是传的json参数所以用的这个
httpPost.setEntity(entityParam); //把参数添加到post请求
HttpResponse response = null;
try {
response = httpClient.execute(httpPost);
} catch (IOException e) {
e.printStackTrace();
}
StatusLine statusLine = response.getStatusLine(); //获取请求对象中的响应行对象
int responseCode = statusLine.getStatusCode();
String entity = null;
if ((responseCode >= 200 && responseCode < 300) || responseCode == 409) {
//获取响应信息
try {
entity = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
}
return entity.toString();
}