Java的HttpURLConnection使用记录 - Go语言中文社区

Java的HttpURLConnection使用记录


最近需要请求第三方的接口,需要熟悉一下HttpURLConnection,一下是我的操作的记录
参考链接:
http://www.blogjava.net/supercrsky/articles/247449.html

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("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());

注意细节

  1. set一些设置的时候必须在connection之前,如果在connection之后这些set都没有效果了
  2. post请求的正文是通过outputStream流写入的,但是在这并没有真正的去发送请求,只是放在了内存缓冲区,只有当getInputStream()调用的时候才真正的去请求
  3. 设置超时,防止网络异常的情况下,可能会导致程序僵死而不继续往下执行
//超时设置必须在connection之前
urlConnection.setConnectTimeout(5 * 1000);// 5秒连接超时
urlConnection.setReadTimeout(5 * 1000);// 5秒获取内容超时
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weishujie000/article/details/78672248
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-06 22:47:31
  • 阅读 ( 1150 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢