使用java.net原生的HttpURLConnection类实现http的get和post请求
参考文章https://www.cnblogs.com/hhhshct/p/8523697.html
package com.alison.http;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.*;
public class DoHttpRequest {
/**
* @description 发送HTTP的get请求
* @param url
* 请求的http路径url
* @param params
* 附加的参数,形如'name=lxj&password=123&msg=thanks'
* @return map类型,两个键,headers和response,分别对应信息头字段和返回主体
*/
public static Map<String, Object> makeGetRequest(String url, String params) {
Map<String, Object> result = new HashMap<String, Object>();
String response = "";
Map<String, List<String>> headers = new HashMap<String, List<String>>();
HttpURLConnection conn = null;
BufferedReader br = null;
try {
//远程连接URL
URL url0 = new URL(url);
//建立连接,HttpURLConnection对象,由url对象openConnection获得
conn = (HttpURLConnection) url0.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
//设置请求方式GET
conn.setRequestMethod("GET");
//设定连接超时时间 15s
conn.setConnectTimeout(15000);
//设定读取远程返回数据时间 6s
conn.setReadTimeout(6000);
//设定连接参数,accept,connection,user-agent,accept-charset,authorization,cookie,referer等
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
//建立实质的连接
conn.connect();
//获取所有响应头字段
headers = conn.getHeaderFields();
for(String key : headers.keySet()){
System.out.println(key + ":" + headers.get(key));
}
//读取返回信息流内容
br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
String line;
while((line = br.readLine()) != null){
// System.out.println(line);
response += line;
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}finally{
if(br!=null){
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
result.put("headers", headers);
result.put("response", response);
return result;
}
/**
* @description 发送HTTP的post请求
* @param url
* 请求的http路径url
* @param body
* 附加的参数,json格式,{'name':'lxj', 'password':'123', 'msg':'thanks'}
* @return string类型,返回response信息主体
*/
public static String makePostRequest(String url, String body) {
String result = "";
BufferedReader br = null;
PrintWriter pw = null;
try {
URL url1 = new URL(url);
HttpURLConnection conn = (HttpURLConnection) url1.openConnection();
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true); //要写入body体,就得设定output为true
//除了写入body之外,其他设定基本同get方法
pw = new PrintWriter(conn.getOutputStream());
pw.print(body);
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.connect();
br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
String line ;
while((line = br.readLine()) != null){
System.out.println(br);
result += line;
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} finally {
try {
pw.close();
br.close();
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
return result;
}
public static void main(String[] args) {
String getUrl = "http://www.baidu.com";
String body = "{'name':'lxj', 'password':'123', 'msg':'thanks'}";
// String c = makePostRequest(getUrl, body);
// System.out.println("-->" + c);
Map<String, Object> map = makeGetRequest(getUrl, "");
System.out.println("*************");
System.out.println(map.keySet());
System.out.println(map.get("response"));
System.out.println(map.get("headers"));
}
}