1、引入相关依赖包
jar包下载:httpcore4.5.5.jar fastjson-1.2.47.jar
1发送form格式application/x-www-form-urlencoded
x-www-form-urlencoded格式里面是正常模式 key1=value1&key2=value2
public static String sendPost(String curl, String param) {
String result = "";// 返回的结果
BufferedReader in = null;// 读取响应输入流
try {
//创建连接
URL url = new URL(curl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);// 是否打开outputStream 相对于程序,即我们向远程服务器写入数据,默认为false,不打开
connection.setDoInput(true); // 输入流,获取到返回的响应内容, 默认为true,所以get请求时可以不设置这个连接信息
connection.setRequestMethod("POST"); //发送请求的方式
connection.setUseCaches(false); //不使用缓存
connection.setInstanceFollowRedirects(true); //重定向,一般浏览器才需要
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); //设置服务器解析数据的方式
connection.setRequestProperty("Cache-Control", "no-cache"); // 禁用缓存
connection.connect();
OutputStream out = connection.getOutputStream();
out.write(param.getBytes());
out.flush();
out.close();
int code = connection.getResponseCode();
if (code != 200) {
//读取响应
// 定义BufferedReader输入流来读取URL的响应,并设置编码方式
in = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"));
String line;
// 读取返回的内容
while ((line = in.readLine()) != null) {
result += line;
}
} else {
//读取响应
// 定义BufferedReader输入流来读取URL的响应,并设置编码方式
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String line;
// 读取返回的内容
while ((line = in.readLine()) != null) {
result += line;
}
}
}
catch (Exception e) {
e.printStackTrace();
System.out.println("Http请求方法内部问题");
}
finally {
try {
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}
2发送form格式application/x-www-form-urlencoded
x-www-form-urlencoded格式里面是非正常模式
eg: sql=select * from Certification where id = ‘531663cb5d0f402c80b0826373a6988b&aaa=123’.格式里面有混合进去的&key=value
使用如下:先得到List params1,在调用post方法.
/**
* HttpClient发送GET、POST请求
* @Author libin
* @CreateDate 2018.5.28 16:56
*/
public class HttpClientService {
private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientService.class);
/**
* 返回成功状态码
*/
private static final int SUCCESS_CODE = 200;
/**
* 发送GET请求
* @param url 请求url
* @param nameValuePairList 请求参数
* @return JSON或者字符串
* @throws Exception
*/
public static Object sendGet(String url, List<NameValuePair> nameValuePairList) throws Exception{
JSONObject jsonObject = null;
CloseableHttpClient client = null;
CloseableHttpResponse response = null;
try{
/**
* 创建HttpClient对象
*/
client = HttpClients.createDefault();
/**
* 创建URIBuilder
*/
URIBuilder uriBuilder = new URIBuilder(url);
/**
* 设置参数
*/
uriBuilder.addParameters(nameValuePairList);
/**
* 创建HttpGet
*/
HttpGet httpGet = new HttpGet(uriBuilder.build());
/**
* 设置请求头部编码
*/
httpGet.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"));
/**
* 设置返回编码
*/
httpGet.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8"));
/**
* 请求服务
*/
response = client.execute(httpGet);
/**
* 获取响应吗
*/
int statusCode = response.getStatusLine().getStatusCode();
if (SUCCESS_CODE == statusCode){
/**
* 获取返回对象
*/
HttpEntity entity = response.getEntity();
/**
* 通过EntityUitls获取返回内容
*/
String result = EntityUtils.toString(entity,"UTF-8");
/**
* 转换成json,根据合法性返回json或者字符串
*/
try{
jsonObject = JSONObject.parseObject(result);
return jsonObject;
}catch (Exception e){
return result;
}
}else{
LOGGER.error("HttpClientService-line: {}, errorMsg{}", 97, "GET请求失败!");
}
}catch (Exception e){
LOGGER.error("HttpClientService-line: {}, Exception: {}", 100, e);
} finally {
response.close();
client.close();
}
return null;
}
/**
* 发送POST请求
* @param url
* @param nameValuePairList
* @return JSON或者字符串
* @throws Exception
*/
public static Object sendPost(String url, List<NameValuePair> nameValuePairList) throws Exception{
JSONObject jsonObject = null;
CloseableHttpClient client = null;
CloseableHttpResponse response = null;
try{
/**
* 创建一个httpclient对象
*/
client = HttpClients.createDefault();
/**
* 创建一个post对象
*/
HttpPost post = new HttpPost(url);
/**
* 包装成一个Entity对象
*/
StringEntity entity = new UrlEncodedFormEntity(nameValuePairList, "UTF-8");
/**
* 设置请求的内容
*/
post.setEntity(entity);
/**
* 设置请求的报文头部的编码
*/
post.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"));
/**
* 设置请求的报文头部的编码
*/
post.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8"));
/**
* 执行post请求
*/
response = client.execute(post);
/**
* 获取响应码
*/
int statusCode = response.getStatusLine().getStatusCode();
if (SUCCESS_CODE == statusCode){
/**
* 通过EntityUitls获取返回内容
*/
String result = EntityUtils.toString(response.getEntity(),"UTF-8");
/**
* 转换成json,根据合法性返回json或者字符串
*/
try{
jsonObject = JSONObject.parseObject(result);
return jsonObject;
}catch (Exception e){
return result;
}
}else{
LOGGER.error("HttpClientService-line: {}, errorMsg:{}", 146, "POST请求失败!");
}
}catch (Exception e){
LOGGER.error("HttpClientService-line: {}, Exception:{}", 149, e);
}finally {
response.close();
client.close();
}
return null;
}
/**
* 组织请求参数{参数名和参数值下标保持一致}
* @param params 参数名数组
* @param values 参数值数组
* @return 参数对象
*/
public static List<NameValuePair> getParams(Object[] params, Object[] values){
/**
* 校验参数合法性
*/
boolean flag = params.length>0 && values.length>0 && params.length == values.length;
if (flag){
List<NameValuePair> nameValuePairList = new ArrayList<>();
for(int i =0; i<params.length; i++){
nameValuePairList.add(new BasicNameValuePair(params[i].toString(),values[i].toString()));
}
return nameValuePairList;
}else{
LOGGER.error("HttpClientService-line: {}, errorMsg:{}", 197, "请求参数为空且参数长度不一致");
}
return null;
}
}