HttpURLConnection详解及使用

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.mzph.cn/news/734101.shtml

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

相关文章

docker-swarm集群搭建

目录 一、docker swarm介绍 二、部署docker 三、搭建集群 3.1 工作模式 3.2 将当前主机作为leader 3.3 将第二个节点slave1加入到worker 3.4 将第三个节点slave2也加入到worker 3.5 将第四个节点(slave3)加入到manager 四、总结 一、docker swarm介绍 Docker Swarm…

python图像处理,opencv笔记汇总

基本图像处理 翻转 使用python翻转图片 按比例缩放,拼接 【opencv】指定宽或高按比例缩放图片 & 拼接图片 待更新

java中{ }对变量可用scope的限制

改变变量定义位置可解决 y定义在{}内,属于局部变量,只能再在{}其中有效使用,因此第二个输出报错。 将int y6放在main()后,{}前可解决

Toyota Programming Contest 2024#3(AtCoder Beginner Contest 344)(A,B,C,D,E,F)

比赛链接 这场偏简单,C是暴力,D是变种背包,E是map链表,F是四维dp。DF出的很好,建议做。 A Spoiler 题意: 给你一个由小写英文字母和 | 组成的字符串 S S S。 S S S 中保证包含两个 |。 请删除两个|之间…

浅析开源内存数据库Fastdb

介绍: Fastdb是免费开源内存数据库,其优秀的性能,和简洁的C代码,让我学习使用过程中收益颇多,但是国内中文相关研究的文章相当稀少,外文我查询相当不便。有兴趣的朋友可以通过以下网站访问:Mai…

《vtk9 book》 官方web版 第3章 - 计算机图形基础 (3 / 6)

3.8 演员几何 我们已经看到了光照属性如何控制演员的外观,以及相机如何结合变换矩阵将演员投影到图像平面上。剩下的是定义演员的几何形状,以及如何将其定位在世界坐标系中。 建模 计算机图形学研究中的一个重要主题是建模或表示物体的几何形状。…

一劳永逸的方法解决:LNK1168无法打开 xxx.exe 进行写入 报错问题

这种错误的产生原因: 运行程序退出不是按正常流退出,是按窗口右上角的 “X” 来关闭程序,但是后台的xxx.exe控制台程序还在运行;修改程序的代码后再运行,就会报LNK1168的错误; 报错示例: 解决方…

欢迎来到实力至上教室-名言(解释来自文心一言)

Il ne faut pas soffenser que les autres nous cachent la vrit,puisque nous nous la cachons si souvent nous-mmes. 我们不必为他人隐藏本性而感到愤怒,因为你自己也在隐藏本性。 解释-- 这句话提醒我们要以宽容和理解的态度对待他人。当我们意识到自己也在隐藏…

文本生成视频:从 Write-a-video到 Sora

2024年2月15日,OpenAI 推出了其最新的文本生成视频模型——Sora。Sora 能够根据用户的指令生成一分钟长度的高质量视频内容。这一创新的发布迅速在社会各界引发了广泛关注与深入讨论。本文将围绕本实验室发表于SIGGRAPH AISA 的 Write-a-video和 Sora 展开&#xff…

【DevOps基础篇之k8s】Kubernetes API服务认证/授权

【DevOps基础篇之k8s】Kubernetes API服务认证/授权 目录 【DevOps基础篇之k8s】Kubernetes API服务认证/授权Kubernetes API ServerAPI服务器主机和端口API服务器认证/授权基于SSL证书的认证基于令牌的认证推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课Kube…

Django——路由

Django——路由 1、路由分发 可以在每个应用中创建一个 urls.py 进行在该应用中的路由匹配。 # include 在根目录路由中对应用的路由进行分发 # 对 UrlApp 应用分发一个 路由配置 path(urlapp/ , include(UrlApp.urls)), path(urlapp2/ , include(UrlApp2.urls))2、匹配路由…

8核16G服务器多少钱?2024年腾讯云8核16G轻量服务器性能测评

腾讯云8核16G轻量服务器CPU性能如何?18M带宽支持多少人在线?轻量应用服务器具有100%CPU性能,18M带宽下载速度2304KB/秒,折合2.25M/s,系统盘为270GB SSD盘,月流量3500GB,折合每天116.6GB流量&…

真实案例分享:MOS管电源开关电路,遇到上电冲击电流超标

做硬件,堆经验。 分享一个案例:MOS管电源开关电路,遇到上电冲击电流超标,怎么解决的呢? 下面是正文部分。 —— 正文 —— 最近有一颗用了挺久的MOSFET发了停产通知,供应链部门找到我们研发部门&#xff0c…

Pycharm与Anaconda安装

网址: Pycharm:https://www.jetbrains.com/pycharm/ Anaconda:https://www.anaconda.com/download/ 官网下载速度太慢可以选择到清华源下载:https://repo.anaconda.com/archive/ 一:Anaconda安装 安装: …

MVO-CNN-BiLSTM多输入时序预测多元宇宙优化算法-卷积-双向长短期神经网络时序预测(Matlab)

摘要: 本文介绍了MVO-CNN-BiLSTM多输入时序预测模型的原理和实现,结合元宇宙优化算法进行参数优化,使用卷积神经网络和双向长短期记忆网络进行时序预测,并通过Matlab实现。阅读时长约60分钟。 关键词:MVO, CNN, BiLS…

Building Systems with the ChatGPT API

Building Systems with the ChatGPT API 本文是 https://www.deeplearning.ai/short-courses/building-systems-with-chatgpt/ 这门课程的学习笔记。 文章目录 Building Systems with the ChatGPT APIWhat you’ll learn in this course Language Models, the Chat Format and…

程序员的金三银四求职宝典:面试技巧分享

​​​​​​​随着春天的到来,程序员们迎来了求职的旺季——金三银四。在这个时期,各大公司纷纷开放招聘,为求职者提供了丰富的选择机会。然而,如何在众多的面试中脱颖而出,成功获得心仪的职位,就需要掌握一些有效的面试技巧。下面,就让我们一起来探讨一下金三银四求职…

html2canvas+jsPDF实现前端导出pdf

html2canvasjsPDF实现前端导出pdf 安装插件包 npm install jspdf npm install html2canvas引入插件 import html2canvas from html2canvas; import jsPDF from jspdf;生成pdf const perCanvas document.createElement(canvas);perCanvas.style.backgroundColor #fffconst …

【C++ vector 类】

1. 标准库中的vector类 vector 类 的介绍: 注意: 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样,vector 也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是…

长度为n的数组a初始值全为0,目标是把数组a变为数组b(1<=bi<=n), 可以进行任意次操作:选择长度为k的数组c,(1<=ci<=n且两两不同)

对于1<i<k, 把 a[c[i]] 改为c[i % k 1]。给定n&#xff0c;k和数组b&#xff0c;判断能否得到数组b。 题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #d…