HttpURLConnection详解及使用

news2024/10/3 8:01:58

HttpURLConnection

请求响应流程

在这里插入图片描述

设置连接参数的方法

  • setAllowUserInteraction
  • setDoInput
  • setDoOutput
  • setIfModifiedSince
  • setUseCaches
  • setDefaultAllowUserInteraction
  • setDefaultUseCaches

发送URL请求

建立实际连接之后,就是发送请求,把请求参数传到服务器,这就需要使用outputStream把请求参数传给服务器:

  • getOutputStream

获取响应

请求发送成功之后,即可获取响应的状态码,如果成功既可以读取响应中的数据,获取这些数据的方法包括:

①getContent

②getHeaderField

③getInputStream

HttpURLConnection只能通过URL.openConnection()方法创建具体的实例。

虽然底层的网络连接可以被多个HttpURLConnection实例共享,但每一个HttpURLConnection实例只能发送一个请求。请求结束之后,应该调用HttpURLConnection实例的InputStream或OutputStream的close()方法以释放请求的网络资源,不过这种方式对于持久化连接没用。对于持久化连接,得用disconnect()方法关闭底层连接的socket。

创建HttpURLConnection

URL url = new URL("http://localhost:8080/xxx.do");  
   
URLConnection urlConnection = url.openConnection();// 此处的urlConnection对象实际上是根据URL的  
// 请求协议(此处是http)生成的URLConnection类  
// 的子类HttpURLConnection,故此处最好将其转化  
// 为HttpURLConnection类型的对象,以便用到  
// HttpURLConnection更多的API.如下:  
   
HttpURLConnection httpUrlConnection = (HttpURLConnection) rulConnection;  

设置HttpURLConnection参数

// 设定请求的方法为"POST",默认是GET  
httpUrlConnection.setRequestMethod("POST");  
  
// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在  
// http正文内,因此需要设为true, 默认情况下是false;  
httpUrlConnection.setDoOutput(true);  
   
// 设置是否从httpUrlConnection读入,默认情况下是true;  
httpUrlConnection.setDoInput(true);  
   
// Post 请求不能使用缓存  
httpUrlConnection.setUseCaches(false);  
   
// 设定传送的内容类型是可序列化的java对象  
// (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)  
httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object");  
 
// 连接,从上述url.openConnection()至此的配置必须要在connect之前完成,  
httpUrlConnection.connect();  

URLConnection建立连接

// 此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法,  
// 所以在开发中不调用上述的connect()也可以)。  
OutputStream outStrm = httpUrlConnection.getOutputStream();  
getInputStream()也是同理。

HttpURLConnection发送请求

// 现在通过输出流对象构建对象输出流对象,以实现输出可序列化的对象。  
ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm);  
   
// 向对象输出流写出数据,这些数据将存到内存缓冲区中  
objOutputStrm.writeObject(new String("我是测试数据"));  
   
// 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream)  
objOutputStm.flush();  
  
// 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中,  
// 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器   // 调用HttpURLConnection连接对象的getInputStream()函数,  

InputStream inStrm = httpConn.getInputStream(); 
objOutputStm.close();  

HttpURLConneciton获取响应

 // 调用HttpURLConnection连接对象的getInputStream()函数,  

InputStream inStrm = httpConn.getInputStream(); 

设置POST参数

OutputStream os = httpConn.getOutputStream();  
             String param = new String();  
             param = "CorpID=" + CorpID +  
                     "&LoginName=" + LoginName+  
                     "&send_no=" + phoneNumber +  
                     "&msg=" + java.net.URLEncoder.encode(msg,"GBK"); ;  
             os.write(param.getBytes());  

超时设置,防止 网络异常的情况下,可能会导致程序僵死而不继续往下执行

System.setProperty("sun.net.client.defaultConnectTimeout", "30000");  

System.setProperty("sun.net.client.defaultReadTimeout", "30000");  

其中: sun.net.client.defaultConnectTimeout:连接主机的超时时间(单位:毫秒)

sun.net.client.defaultReadTimeout:从主机读取数据的超时时间(单位:毫秒)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1505002.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习500问——Chapter02:机器学习基础(5)

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 2.14 贝叶斯分类器 2.14.1 图解极大似然估计 极大似然估计的原理,用一张图片来说明,如下图所示: 例:有两个外形完全相同的箱子,1号箱…

使用Migration升级数据库

使用Migration升级数据库 package com.tiger.room2;import android.content.Context;import androidx.annotation.NonNull; import androidx.room.Database; import androidx.room.Room; import androidx.room.RoomDatabase; import androidx.room.migration.Migration; impo…

Linux系统下使用C++推流多路视频流

先看拉取的视频流效果: 代码如下: 一开始打算使用python写多路视频推流,但在ubuntu系统上搞了好久就是搞不定openh264导致的错误,然后改用c了,代码如下,我这里推了两路视频流,一路是网络摄像头&…

LabVIEW智能Modbus监控系统

LabVIEW智能Modbus监控系统 在自动化和信息化迅速发展下,传统的监控系统已无法满足现代工业对于数据通讯和处理的高效率和高可靠性要求。为了解决这一问题,设计了一套基于LabVIEW的智能Modbus监控系统。该系统利用LabVIEW的图形化编程环境和Modbus协议的…

QT给QLabel设置背景颜色

1.选中label 2.右键点击"改变样式表" 3.填写样式,点击apply,ok 注意 #{QLabel名称},例如名称是label就是QLabel#label

Java两周半速成之路(第十二天)

一.泛型(JDK1.5以后出现的机制) 1.泛型由来 为什么会有泛型呢? 通过案例引入 早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问…

【MySQL使用】show processlist 命令详解

show processlist 命令详解 一、命令含义二、命令返回参数三、Command值解释四、State值解释五、参考资料 一、命令含义 对于一个MySQL连接,或者说一个线程,任何时刻都有一个状态,该状态表示了MySQL当前正在做什么。SHOW PROCESSLIST 命令的…

浏览器与Node.js事件循环:异同点及工作原理

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

2024年目标检测研究进展

YOLOv9 图片来源网络 YOLO相关的研究:https://blog.csdn.net/yunxinan/article/details/103431338

【蓝桥杯-单片机】LED和按键小练习:Led彩灯控制系统

文章目录 【蓝桥杯-单片机】LED和按键小练习:Led彩灯控制系统01 题目描述02 题目解答03 本题总结整体逻辑框架(详细版)整体逻辑框架(缩略版)按键读取模块按键消抖模块流水灯显示模式(1)从上向下…

基于Java的高校实验室管理系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…

【Python】成功解决ModuleNotFoundError: No module named ‘matplotlib‘

【Python】成功解决ModuleNotFoundError: No module named ‘matplotlib’ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448…

Pygame教程07:键盘常量+键盘事件的2种捕捉方式

------------★Pygame系列教程★------------ Pygame教程01:初识pygame游戏模块 Pygame教程02:图片的加载缩放旋转显示操作 Pygame教程03:文本显示字体加载transform方法 Pygame教程04:draw方法绘制矩形、多边形、圆、椭圆、弧…

数学建模-动态规划(美赛运用)

动态规划模型的要素是对问题解决的抽象,其可分为: 阶段。指对问题进行解决的自然划分。例如:在最短线路问题中,每进行走一步的决策就是一个阶段。 状态。指一个阶段开始时的自然状况。例如:在最短线路问题中&#xff…

Linux文件和文件夹操作

前言: 相较于前面背诵的诸多内容,可能现在的部分就需要多多的练习了,难度也慢慢提升。 那就大家一起慢慢努力吧!!!!! 目录 一、Linux目录结构 (一)Window…

HTML概念

文章目录 1. HTML 概念1.1. 简介1.2. 思想1.3. 特点1.4. 语法1.4.1. 标签1.4.2. 属性1.4.3. 标签体1.4.4. 注释 2. HTML 实体2.1. 练习 3. HTML 结构3.1. <!DOCTYPE html>声明3.2. html根标签 4. 补充4.1. 管理文件4.2. 配置 VsCode4.2. 配置 VsCode 1. HTML 概念 1.1. 简…

【项目笔记】java微服务:黑马头条(day01)

文章目录 环境搭建、SpringCloud微服务(注册发现、服务调用、网关)1)课程对比2)项目概述2.1)能让你收获什么2.2)项目课程大纲2.3)项目概述2.4)项目术语2.5)业务说明 3)技术栈4)nacos环境搭建4.1)虚拟机镜像准备4.2)nacos安装 5)初始工程搭建5.1)环境准备5.2)主体结构 6)登录6.1…

微信小程序-侧滑删除

简介 movable-view和movable-area是可移动的视图容器&#xff0c;在页面中可以拖拽滑动。 本篇文章将会通过该容器实现一个常用的拖拽按钮功能。 使用效果 代码实现 side-view.wtml 布局见下面代码&#xff0c;left view为内容区域&#xff0c;right view为操作按钮&a…

因为一次 Kafka 宕机,终于搞透了 Kafka 高可用原理!

Kafka宕机引发的高可用问题 问题要从一次Kafka的宕机开始说起。 但最近系统测试人员常反馈偶有Kafka消费者收不到消息的情况&#xff0c;登陆管理界面发现三个节点中有一个节点宕机挂掉了。但是按照高可用的理念&#xff0c;三个节点还有两个节点可用怎么就引起了整个集群的消…

排序算法的对比

类别排序方法时间复杂度空间复杂度稳定性平均情况特殊情况 插入 排序 插入排序基本有序最优稳定希尔排序不稳定 选择 排序 选择排序不稳定堆排序不稳定 交换 排序 冒泡排序稳定快速排序基本有序最差不稳定归并排序稳定基数排序稳定