首页  

基于 HttpURLConnection 的 http 客户端     所属分类 java 浏览量 933
HttpURLConnection jdk自带 ,不需要额外依赖

abstract public class HttpURLConnection extends URLConnection 


Each HttpURLConnection instance is used to make a single request 
but the underlying network connection to the HTTP server may be transparently shared by other instances. 
Calling the close() methods on the InputStream or OutputStream of an HttpURLConnection
after a request may free network resources associated with this instance 
but has no effect on any shared persistent connection.
Calling the disconnect() method may close the underlying socket 
if a persistent connection is otherwise idle at that time.
 
 
每个HttpURLConnection实例都用于发出单个请求
但是到HTTP服务器的底层网络连接可能由其他实例透明地共享。
调用HttpURLConnection的InputStream或OutputStream上的close()方法
可以释放与此实例相关联的网络资源,但对任何共享的持久连接都没有影响。
调用disconnect()方法可能会关闭底层套接字,如果持久连接在其他情况下是空闲的。

调用HttpURLConnection的InputStream或OutputStream上的close()方法
不会关闭底层的持久连接

底层的持久连接 可共享

disconnect() 可能会关闭底层套接字连接 ,注意是可能!!!


基于 HttpURLConnection  的 工具类
URLConnectionUtil

https://gitee.com/dyyx/hellocode/blob/master/src/http/URLConnectionUtil.java


header 设置
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Charset", UTF8);
conn.setRequestProperty("Content-Type", "application/json");


运行main方法  
发送多次请求
netstat -an |grep 8000
查看打开的端口 ,只有一个端口 一条连接
说明 多个 HttpURLConnection 实例,共享 底层物理连接
finally 里 调用 conn.disconnect(); 也是一样的效果


HttpURLConnection对象不能直接构造,通过URL类中的openConnection() 创建 HttpURLConnection的connect() ,只是建立了一个与服务器的TCP连接,并没有实际发送HTTP请求 HTTP请求获取服务器响应数据(如调用getInputStream() getResponseCode()等方法)时才发送 可以不调用 connect()方法 HttpURLConnection的配置需要在connect()方法执行之前完成 HttpURLConnection 基于HTTP协议,底层通过socket通信实现 如果不设置超时(timeout),可能导致程序僵死而不继续往下执行 HTTP正文内容通过OutputStream写入, 向流中写入数据不会立即发送到网络,而是存在于内存缓冲区中,待流关闭时,根据写入的内容生成HTTP正文 调用getInputStream()方法时,返回一个输入流,用于读取HTTP请求返回信息
springboot REST api 实例

上一篇     下一篇
dubbo 自定义 filter 实例

TBA聊考研

springboot REST api 实例

Spring5.2 @Configuration 属性 proxyBeanMethods 作用

aerospike 乐观锁实例

Maven设置项目编码及jdk版本