基于apache httpClient4.5.1版本编写。
public class HttpClientUtil {
private static Logger logger = Logger.getLogger("HttpClientUtil");/**
* http get
* @param url
* @return
* @throws IOException
* @throws UnsupportedOperationException
*/
public static InputStream get(String url, Map<String, String> map) {
//ȡhttpClient
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
StringBuilder stringBuilder = new StringBuilder();
if (url == null || url.length() == 0) {
return null;
} else {
int index = url.indexOf("?");
// 如果index !=-1表示ip地址含有参数 -----http://210.44.76.138?k1=v1&k2=v2
// 此if else语句用以过滤掉 url后面的参数,使该ip变成 http://210.44.76.138这种没参数的形式
if (index != -1) {
// 获取不含?的Ip格式.
url = url.substring(0, index);
stringBuilder.append(url);
} else {
// 如果index==-1,表示该ip没有?,也就是没有参数,将原Ip加入stringBuilder对象-------http://210.44.76.138
// or http://210.44.76.138/
stringBuilder.append(url);
logger.info("index==-1 stringBuild" + stringBuilder.toString());
}
// 判断map受否为空,不为空则要拼装ip后面的参数
if (map != null && map.size() != 0) {
Set<Map.Entry<String, String>> set = map.entrySet();
// 设置计数器,用于控制map.size=1和map.size>1时的执行
int count = 1;
for (Entry<String, String> entry : set) {
String key = entry.getKey();
String value = entry.getValue();
if (count == 1) {
stringBuilder.append("?").append(key).append("=").append(value);
} else {
stringBuilder.append("&").append(key).append("=").append(value);
}
count++;
}
logger.info("url添加自定义参数之前的值:" + url);
logger.info("stringBuilder的值:" + stringBuilder.toString());
// 将参数添加到url中,形成新的带参数的URL格式
url = stringBuilder.toString();
}
}
logger.info("url添加制定意之前的值:" + url);
RequestConfig defaultRequestConfig = RequestConfig.custom().setExpectContinueEnabled(true)
.setStaleConnectionCheckEnabled(true)
.setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
.setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)).build();
RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig).setSocketTimeout(5000)
.setConnectTimeout(3000).setConnectionRequestTimeout(3000).build();
HttpGet httpGet = new HttpGet(url);
httpGet.setConfig(requestConfig);
try {
response = httpClient.execute(httpGet);
return dealResponse(response);
} catch (IOException e) {
// TODO Auto-generated catch block
return dealResponse(response);
// e.printStackTrace();
}
}
/**
* @param url
* @param map
* @return InputStream (post请求的 内容)
*/
public static InputStream post(String url, Map<String, String> map) {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpResponse httpresponse =null;
List<NameValuePair> params = new ArrayList<NameValuePair>();
InputStream is = null;
String body = null;
try {
// 设置客户端编码
RequestConfig defaultRequestConfig = RequestConfig.custom().setExpectContinueEnabled(true)
.setStaleConnectionCheckEnabled(true)
.setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
.setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)).build();
RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig).setSocketTimeout(5000)
.setConnectTimeout(3000).setConnectionRequestTimeout(3000).build();
// Post请求
HttpPost httppost = new HttpPost(url);
// 设置post编码
httppost.setConfig(requestConfig);
if (map != null && map.size() != 0) {
Set<Map.Entry<String, String>> set = map.entrySet();
// 设置计数器,用于控制map.size=1和map.size>1时的执行
for (Entry<String, String> entry : set) {
String key = entry.getKey();
String value = entry.getValue();
params.add(new BasicNameValuePair(key, value));
httppost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
}
String httppostContet=convertStreamToString(httppost.getEntity().getContent());
logger.info("url添加自定义参数之前的值:" + url);
logger.info("httppostContent的内容为:"+httppostContet);
// 将参数添加到url中,形成新的带参数的URL格式
}
httppost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
// 设置报文头
httppost.setHeader("Content-Type", "text/xml;charset=UTF-8");
// 发送请求
httpresponse = httpClient.execute(httppost);
// 获取返回数据
return dealResponse(httpresponse);
} catch (Exception e) {
return dealResponse(httpresponse);
}
}
/**
* 根据要访问的url和传递的参数map值,访问get请求,并且根据 get请求返回的值 按照你制定的encode值格式化响应的内容
* @param url 要传递的url
* @param Map<String,String> 请求时要传递的参数
* @param encode 对响应返回值做的编码格式转化,按照你制定的encode值格式化响应的内容
* @return String (响应response 的内容,内容格式自定义)
*/
public static String getString(String url, Map<String, String> map, String encode) {
InputStream is = get(url, map);
if (is != null) {
try {
return stream2String(is, encode);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
/**
* @param url 要传递的url
* @param Map<String,String> 请求时要传递的参数
* @return String (响应response 的内容,response内容格式默认设置为utf-8)
*/
public static String getString(String url, Map<String, String> map) {
return getString(url, map, "utf-8");
}
/**
* 处理response的内容, response.getContent
* @param response 要处理的response对象
* @return InputStream对象 --其中InputStream对象为reponse的content内容
* @throws IOException
* @throws UnsupportedOperationException
*/
public static InputStream dealResponse(HttpResponse response) {
InputStream is = null;
if (null == response) {
byte[] bt = new byte[4];
is = new ByteArrayInputStream(bt);
} else {
HttpEntity he = response.getEntity();
try {
if (response.getStatusLine().getStatusCode() == 200) {
is = he.getContent();
} else {
is = he.getContent();
}
} catch (UnsupportedOperationException | IOException e) {
e.printStackTrace();
}
}
return is;
}
/**
* InputStream对象按照指定的格式转化为字符串
* @param is
* @param encode
* @return convertContent2String (InputStream转化后的String内容)
* @throws UnsupportedEncodingException
*/
public static String stream2String(InputStream is, String encode) throws UnsupportedEncodingException {
String convertContent2String = convertStreamToString(is);
ChangeCharsetUtil changeCharsetUtil = new ChangeCharsetUtil();
if (changeCharsetUtil.GBK.equalsIgnoreCase(encode)) {
convertContent2String = changeCharsetUtil.toGBK(convertContent2String);
} else if (changeCharsetUtil.ISO_8859_1.equalsIgnoreCase(encode)) {
convertContent2String = changeCharsetUtil.toISO_8859_1(convertContent2String);
} else if (changeCharsetUtil.US_ASCII.equalsIgnoreCase(encode)) {
convertContent2String = changeCharsetUtil.toASCII(convertContent2String);
} else if (changeCharsetUtil.UTF_16.equalsIgnoreCase(encode)) {
convertContent2String = changeCharsetUtil.toUTF_16(convertContent2String);
} else if (changeCharsetUtil.UTF_16BE.equalsIgnoreCase(encode)) {
convertContent2String = changeCharsetUtil.toUTF_16BE(convertContent2String);
} else if (changeCharsetUtil.UTF_16LE.equalsIgnoreCase(encode)) {
convertContent2String = changeCharsetUtil.toUTF_16LE(convertContent2String);
} else if (changeCharsetUtil.UTF_8.equalsIgnoreCase(encode)) {
convertContent2String = changeCharsetUtil.toUTF_8(convertContent2String);
} else {
convertContent2String = convertContent2String;
}
return convertContent2String;
}
/**
* 解析出InputStream对象中的内容,并将其转化为字符串格式,没有对字符串进行格式转化处理,只是单纯的格式转化
* @param is 要转化为字符串的InputStream对象
* @return String (InputStream转化后的字符串)
* */
public static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String ip = "http://210.44.176.116/cjcx/zcjcx_list.php";
Map<String, String> map = new HashMap<>();
map.put("post_xuehao", "12110404003");
// map.put("age", "10");
// map.put("11", "1dad0");
// map.put("ssd", "1gggggg0");
// map.put("ff", "10");
// map.put("k", null);
InputStream is=post("http://210.44.176.116/cjcx/zcjcx_login.html", map);
String content=getString(ip, null);
//String contentPost=convertStreamToString(is);
//String content = getString(ip, null);
System.out.println("content:" + content);
}
}