Java的HttpURLConnection使用记录
2017-11-30 11:37
555 查看
最近需要请求第三方的接口,需要熟悉一下HttpURLConnection,一下是我的操作的记录
参考链接:
http://www.blogjava.net/supercrsky/articles/247449.html
GET请求的参数是放在url后面拼接的,请求大小有限制,具体多少大家可以自行去百度,在这里就不多说了
POST请求参数是放在HTTP请求的正文里的,可传输的内容远大于GET请求,而且理论上来说POST请求是没有大小限制的,所以使用POST请求较多
一般正常的请求,get参数会显示在地址栏上,参数很容易被获取,安全性也较低,所以使用POST请求会比较好
setRequestProperty(key,value)
addRequestProperty(key,value)
setRequestProperty和addRequestProperty的区别就是,setRequestProperty会覆盖已经存在的key的所有values,有清零重新赋值的作用。而addRequestProperty则是在原来key的基础上继续添加其他value。
URL对象的建立
HttpURLConnection参数设置
添加请求头的时候如果有中文,就有可能造成中文乱码这时候可以使用这个方法
对某个参数进行URLEncoder.encode,服务端获取参数之后再通过URLDecoder.decode一下就可以获得完整的中文了
HttpURLConnection连接问题
HttpURLConnection连接
post请求的正文是通过outputStream流写入的,但是在这并没有真正的去发送请求,只是放在了内存缓冲区,只有当getInputStream()调用的时候才真正的去请求
设置超时,防止网络异常的情况下,可能会导致程序僵死而不继续往下执行
参考链接:
http://www.blogjava.net/supercrsky/articles/247449.html
URL的请求类型
一般的url请求分为两种,一种是GET,一种是POSTGET请求的参数是放在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("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());
注意细节
set一些设置的时候必须在connection之前,如果在connection之后这些set都没有效果了post请求的正文是通过outputStream流写入的,但是在这并没有真正的去发送请求,只是放在了内存缓冲区,只有当getInputStream()调用的时候才真正的去请求
设置超时,防止网络异常的情况下,可能会导致程序僵死而不继续往下执行
//超时设置必须在connection之前 urlConnection.setConnectTimeout(5 * 1000);// 5秒连接超时 urlConnection.setReadTimeout(5 * 1000);// 5秒获取内容超时
相关文章推荐
- Java 中使用HttpURLConnection发起POST 请求
- Java Http连接中(HttpURLConnection)中使用代理(Proxy)及其验证(Authentication)
- Java Http连接中(HttpURLConnection)中使用代理(Proxy)及其验证(Authentication)
- JAVA使用HttpUrlConnection实现自动上传文
- java.net.HttpURLConnection的使用
- 『转』【Java】java.net.HttpURLConnection的使用
- Java Http连接中(HttpURLConnection)中使用代理(Proxy)及其验证(Authentication)
- java使用HttpURLConnection检索网站时403错误处理方式
- JAVA使用httpUrlConnection 调用http接口
- java中的URLConnection和HttpURLConnection的使用
- java.net.HttpURLConnection的使用
- java使用HttpURLConnection检索网站时403错误处理方式
- JAVA使用HttpUrlConnection实现自动上传文件
- 记录HttpURLConnection使用getInputStream带给我的困扰
- 使用HttpURLConnection下载文件时出现 java.io.FileNotFoundException彻底解决办法
- Java Http连接中(HttpURLConnection)中使用代理(Proxy)及其验证(Authentication)
- JAVA使用HttpUrlConnection实现自动上传文件
- java.net.HttpURLConnection的使用
- 关于java response的两种页面输出方式,以及HttpUrlconnection 代理使用注意点
- 使用HttpURLConnection下载文件时出现 java.io.FileNotFoundException彻底解决办法