Java的HttpURLConnection使⽤记录
URL的请求类型
⼀般的url请求分为两种,⼀种是GET,⼀种是POST
GET请求的参数是放在url后⾯拼接的,请求⼤⼩有限制,具体多少⼤家可以⾃⾏去百度,在这⾥就不多说了
POST请求参数是放在HTTP请求的正⽂⾥的,可传输的内容远⼤于GET请求,⽽且理论上来说POST请求是没有⼤⼩限制的,所以使⽤POST请求较多
⼀般正常的请求,get参数会显⽰在地址栏上,参数很容易被获取,安全性也较低,所以使⽤POST请求会⽐较好
请求响应流程
设置请求头或响应头
HttpURLConnection有两种简单的设置请求头的⽅法
setRequestProperty(key,value)
addRequestProperty(key,value)
setRequestProperty和addRequestProperty的区别就是,setRequestProperty会覆盖已经存在的key的所有values,有清零重新赋值的作⽤。⽽addRequestProperty则是在原来key的基础上继续添加其他value。
URL对象的建⽴
// 连接的URL
URL url = new URL("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
// 设置之后可以向服务端写⼊数据、、可以使⽤OutputStream().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之前
添加请求头的时候如果有中⽂,就有可能造成中⽂乱码这时候可以使⽤这个⽅法
// 参数进⾏encode(编码),防⽌中⽂乱码
urlConnection.setRequestProperty("test", de("⼀个测试请求头", "UTF-8"));
对某个参数进⾏de,服务端获取参数之后再通过URLDecoder.decode⼀下就可以获得完整的中⽂了HttpURLConnection连接问题
// 输出流,进⾏传参,所有数据放在这⾥
OutputStream outputStream = OutputStream();
StringBuffer parmStringBuffer = new StringBuffer();
// 拼接参数
parmStringBuffer.append("book_type=").append(234).append("&").append("parm=").append("中⽂测试");
// 写⼊参数内容
outputStream.String().getBytes("UTF-8"));
// 刷新输出流,把所有的数据流数据都传输过去
url编码和utf8区别outputStream.flush();
// 关闭输出流
outputStream.close();
HttpURLConnection连接
// 获取输⼊流,这段是正式请求,会把所有的设置和参数以http⽅式进⾏请求
InputStream input = InputStream();
//在这段之后所有的参数添加都没有效果,因为在这之后并不会再重新的去请求服务器了,所以所有的参数添加必须在这之前,如果需要再添加参数,就必须重新
//打印获取的数据
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
StringBuffer bs = new StringBuffer();
String l = null;
while ((l = adLine()) != null) {
bs.append(l).append("\n");
}
System.out.String());
注意细节
1. set⼀些设置的时候必须在connection之前,如果在connection之后这些set都没有效果了
2. post请求的正⽂是通过outputStream流写⼊的,但是在这并没有真正的去发送请求,只是放在了内存缓冲区,只有当
getInputStream()调⽤的时候才真正的去请求
3. 设置超时,防⽌⽹络异常的情况下,可能会导致程序僵死⽽不继续往下执⾏
//超时设置必须在connection之前
urlConnection.setConnectTimeout(5 * 1000);// 5秒连接超时
urlConnection.setReadTimeout(5 * 1000);// 5秒获取内容超时
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论