HttpUrlConnection和HttpClient两种方式获取GET和POST请求

时间:2022-11-18 13:14:13


HttpURLConnection和HttpClient两者的区别:


HttpURLConnection


HttpURLConnection是java的标准类,HttpURLConnection继承自URLConnection,可用于向指定网站发送GET请求、POST请求。它在URLConnection的基础上提供了如下便捷的方法:

HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。

HttpClient


HttpClient就是一个增强版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection没有提供的有些功能,HttpClient也提供了,但它只是关注于如何发送请求、接收响应,以及管理HTTP连接。


在一般情况下,如果只是需要Web站点的某个简单页面提交请求并获取服务器响应,HttpURLConnection完全可以胜任。但在绝大部分情况下,Web站点的网页可能没这么简单,这些页面并不是通过一个简单的URL就可访问的,可能需要用户登录而且具有相应的权限才可访问该页面。在这种情况下,就需要涉及Session、Cookie的处理了,如果打算使用HttpURLConnection来处理这些细节,当然也是可能实现的,只是处理起来难度就大了。

jar包下载地址:
http://download.csdn.net/detail/mrli113/9853385

code如下:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.http.message.BasicNameValuePair;

/**
* Created by mrli113 on 2017/5/25.
*/

public class HttpRequest {

/**
* 向指定URL发送GET方法的请求
*
* @param url
* 发送请求的URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/

public static String urlConnectionGet(String url,String param){

String result="";
BufferedReader in=null;
try{
String urlNameString=url+"?"+param;
URL realUrl=new URL(urlNameString);
//打开和url之间的连接
URLConnection connection =realUrl.openConnection();
//设置通用的请求属性
connection.setRequestProperty("accept","*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
//建立实际连接
connection.connect();
//获取所有相应字段
Map<String,List<String>> map=connection.getHeaderFields();
//遍历所有的相应头字段
// for(String key:map.keySet()){
// System.out.println(key + "--->" + map.get(key));
// }
// 定义 BufferedReader输入流来读取URL的响应
in=new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));
String line;
while ((line=in.readLine())!=null){
result+=line;
}
}catch (Exception e){
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}finally {
//关闭输入流
try {
if(in!=null){
in.close();
}
}catch (Exception e2){
e2.printStackTrace();
}
}

return result;
}


/**
* 向指定 URL 发送POST方法的请求
*
* @param url
* 发送请求的 URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/

public static String urlConnectionPost(String url,String param){
String result="";
BufferedReader in=null;
PrintWriter out =null;
try {
URL realUrl=new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}

}catch (Exception e){
System.out.println("发送 POST 请求出现异常!"+e);
e.printStackTrace();
}finally {
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}}catch (Exception e2){
System.out.println("发送 POST 请求出现异常!"+e2);
e2.printStackTrace();
}
}


return result;
}



/**
* httpClient的get请求方式
*
* @param url
* 发送请求的 URL
* @param param
* 请求参数
* @return 返回相响应结果
*
*/

public static String httpClientGet(String url,Map<String,String > param) throws Exception{
String result="";

CloseableHttpClient httpClient = HttpClients.createDefault();
//发送get请求
//封装请求参数
String str = "";
if(param!=null&&!param.isEmpty()){
List<NameValuePair> params = new ArrayList<NameValuePair>();
for(String key:param.keySet()){
params.add(new BasicNameValuePair(key,param.get(key)));
}
str = EntityUtils.toString(new UrlEncodedFormEntity(params, Consts.UTF_8));
}

HttpGet request=new HttpGet(url+"?"+str);
//设置请求参数
//请求时间
RequestConfig requestConfig=RequestConfig.custom()
.setSocketTimeout(2000).setConnectTimeout(2000)
.build();
request.setConfig(requestConfig);
try{
CloseableHttpResponse response=httpClient.execute(request);
//请求发送成功并得到响应
if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK){
//读取请求返回的字符串数据
HttpEntity entity=response.getEntity();
result=EntityUtils.toString(entity);

}else{
System.out.print("get请求失败"+url);
}
}catch (Exception e){
System.out.print("get请求异常"+url+e.getStackTrace());
}finally {
request.releaseConnection();
}

return result;
}

/**
* httpClient的post请求方式
*
* @param url
* 发送请求的url
*
* @param map<String,String>
* 请求参数
*
* @result 返回响应的结果
*
* */

public static String httpClientPost(String url,Map<String,String> map){

String result="";
CloseableHttpClient httpClient=HttpClients.createDefault();
HttpPost httpPost=new HttpPost(url);
//设置请求和传输时间
RequestConfig requestConfig=RequestConfig.custom()
.setSocketTimeout(2000)
.setConnectTimeout(2000)
.build();

httpPost.setConfig(requestConfig);

try{
if(null!=map&&!map.isEmpty()){

List<NameValuePair> params = new ArrayList<NameValuePair>();
for(String key:map.keySet()){
params.add(new BasicNameValuePair(key,map.get(key)));
}
String str = EntityUtils.toString(new UrlEncodedFormEntity(params, Consts.UTF_8));
// 解决中文乱码问题
StringEntity entity = new StringEntity(str,"utf-8");
entity.setContentEncoding("UTF-8");
entity.setContentType("application/x-www-form-urlencoded");

httpPost.setEntity(entity);
}
CloseableHttpResponse response=httpClient.execute(httpPost);
//请求成功,并返回响应结果
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
//读取服务器返回过来的json字符串数据
result = EntityUtils.toString(response.getEntity(), "utf-8");
//把json字符串转换成json对象
//jsonResult = JSONObject.parseObject(str);
}
}catch (Exception e){
System.out.print("异常");
}finally {
httpPost.releaseConnection();
}

return result;
}

}