社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
最近需要请求第三方的接口,需要熟悉一下HttpURLConnection,一下是我的操作的记录
参考链接:
http://www.blogjava.net/supercrsky/articles/247449.html
一般的url请求分为两种,一种是GET,一种是POST
HttpURLConnection有两种简单的设置请求头的方法
setRequestProperty和addRequestProperty的区别就是,setRequestProperty会覆盖已经存在的key的所有values,有清零重新赋值的作用。而addRequestProperty则是在原来key的基础上继续添加其他value。
URL对象的建立
// 连接的URL
URL url = new URL("http://127.0.0.1:8080/tfmobile/openBook/getCalendarInfo");
URLConnection urlConnection = url.openConnection();// 打开连接
// 这个地方的urlConnectio是根据请求协议(此处是http协议)生成的URLConnection类的子类HttpURLConnection
// 所以将其转化为HttpURLConnection类,以便使用HttpURLConnection更过的API
HttpURLConnection connection = null;
if (urlConnection instanceof HttpURLConnection) {
connection = (HttpURLConnection) urlConnection;
} else {
System.out.println("请输入 URL 地址");
return ;
}
HttpURLConnection参数设置
//POST可以更好的传参
connection.setRequestMethod("POST");// 设置请求方式,默认是GET
// 设置之后可以向服务端写入数据、、可以使用conn.getOutputStream().write()
// 可以传输参数,POST请求数据放在正文内,所以需要开启传参
urlConnection.setDoOutput(true);
// http读取数据
// 默认是true,所以可以一般的请求都可以获取数据
urlConnection.setDoInput(true);
// 是否使用缓存,Post 请求不能使用缓存
urlConnection.setUseCaches(false);
// 设置请求头
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
// 建立连接,上面的设置都在connect之前
urlConnection.connect();// 连接
添加请求头的时候如果有中文,就有可能造成中文乱码这时候可以使用这个方法
// 参数进行encode(编码),防止中文乱码
urlConnection.setRequestProperty("test", URLEncoder.encode("一个测试请求头", "UTF-8"));
对某个参数进行URLEncoder.encode,服务端获取参数之后再通过URLDecoder.decode一下就可以获得完整的中文了
HttpURLConnection连接问题
// 输出流,进行传参,所有数据放在这里
OutputStream outputStream = urlConnection.getOutputStream();
StringBuffer parmStringBuffer = new StringBuffer();
// 拼接参数
parmStringBuffer.append("book_type=").append(234).append("&").append("parm=").append("中文测试");
// 写入参数内容
outputStream.write(parmStringBuffer.toString().getBytes("UTF-8"));
// 刷新输出流,把所有的数据流数据都传输过去
outputStream.flush();
// 关闭输出流
outputStream.close();
HttpURLConnection连接
// 获取输入流,这段是正式请求,会把所有的设置和参数以http方式进行请求
InputStream input = urlConnection.getInputStream();
//在这段之后所有的参数添加都没有效果,因为在这之后并不会再重新的去请求服务器了,所以所有的参数添加必须在这之前,如果需要再添加参数,就必须重新再走一遍设置,具体有哪些不需要重新再配置暂时没研究
//打印获取的数据
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
StringBuffer bs = new StringBuffer();
String l = null;
while ((l = bufferedReader.readLine()) != null) {
bs.append(l).append("n");
}
System.out.println(bs.toString());
//超时设置必须在connection之前
urlConnection.setConnectTimeout(5 * 1000);// 5秒连接超时
urlConnection.setReadTimeout(5 * 1000);// 5秒获取内容超时
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!