httpClient post/get请求。

基于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);
}


}
HTTP协议是用于从服务器传输超文本到本地浏览器的传输协议。HTTP定义了在Web浏览器和服务器之间如何进行请求和响应,其中包括GET和POST两种常见的HTTP请求方法。 GET请求方法用于从服务器获取数据,通常用于请求查询服务器上的资源。当执行GET请求时,查询参数附加在URL后面,且这些参数是可见的,不超过一定的长度限制。例如,当在浏览器地址栏中输入一个网址时,浏览器默认执行的是GET请求POST请求方法用于向服务器提交数据,通常用于提交表单或上传文件。与GET请求不同的是,POST请求的参数不会显示在URL中,而是放在请求体中,因此POST请求没有长度限制。 在Java中,可以通过Java标准库中的HttpURLConnection或者第三方库如Apache HttpClient和OkHttp来发送HTTP请求。以下是使用Java标准库中的HttpURLConnection发送GET和POST请求的简单示例: ```java // 发送GET请求 URL url = new URL("http://example.com/api/resource"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); // 执行请求... int responseCode = conn.getResponseCode(); // 处理响应... // 发送POST请求 URL urlPost = new URL("http://example.com/api/resource"); HttpURLConnection connPost = (HttpURLConnection) urlPost.openConnection(); connPost.setRequestMethod("POST"); connPost.setDoOutput(true); OutputStream os = connPost.getOutputStream(); Writer writer = new OutputStreamWriter(os, "UTF-8"); writer.write("param1=value1&param2=value2"); writer.flush(); writer.close(); os.close(); // 执行请求... int responseCodePost = connPost.getResponseCode(); // 处理响应... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值