Java 发送http GET/POST请求

2023-10-27

【摘要】 HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。 HttpURLConnection是Java的标准类,它继承自URLConnection,可用于向指定网站发送GET请求、POST请求。

最近项目里面需要用到Java发送http请求,由于发送https请求有点复杂,暂时不考虑

HttpURLConnection

HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。

HttpURLConnection是Java的标准类,它继承自URLConnection,可用于向指定网站发送GET请求、POST请求。它在URLConnection的基础上提供了如下便捷的方法:

int getResponseCode(); // 获取服务器的响应代码。
String getResponseMessage(); // 获取服务器的响应消息。
String getResponseMethod(); // 获取发送请求的方法。
void setRequestMethod(String method); // 设置发送请求的方法。

如何使用

HTTP请求方法有8种,分别是GET、POST、DELETE、PUT、HEAD、TRACE、CONNECT 、OPTIONS。其中PUT、DELETE、POST、GET分别对应着增删改查。

GET:请求获取Request-URI所标识的资源
POST:在Request-URI所标识的资源后附加新的数据
HEAD:请求获取由Request-URI所标识的资源的响应消息报头
PUT: 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE :请求服务器删除Request-URI所标识的资源
TRACE : 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS :请求查询服务器的性能,或者查询与资源相关的选项和需求

返回的数据格式化json   用的是 com.google.gson.*;

开始

(1)包

import com.google.gson.*;
import java.io.*;
import java.net.*;

(2)发送GET请求

public static JsonObject getRequest(String requestUrl) {
        String res = "";
        JsonObject object = null;
        StringBuffer buffer = new StringBuffer();        
        try {
            URL url = new URL(requestUrl);
            HttpURLConnection urlCon = (HttpURLConnection) url.openConnection();
            System.out.println(urlCon.getResponseCode());            
            if (200 == urlCon.getResponseCode()) {
                InputStream is = urlCon.getInputStream();
                InputStreamReader isr = new InputStreamReader(is, "utf-8");
                BufferedReader br = new BufferedReader(isr);
                String str = null;                
                while ((str = br.readLine()) != null) {
                    buffer.append(str);
                }
                br.close();
                isr.close();
                is.close();
                res = buffer.toString();
                JsonParser parse = new JsonParser();
                object = (JsonObject) parse.parse(res);
            } else {                
                throw new Exception("连接失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }        
        return object;
    }

(3)发送POST请求

public static JsonObject postRequest(String path, String post) {
        URL url = null;        
        try {
            url = new URL(path);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();            
            // 提交模式
            httpURLConnection.setRequestMethod("POST");            
            //连接超时 单位毫秒
            httpURLConnection.setConnectTimeout(10000);            
            //读取超时 单位毫秒
            httpURLConnection.setReadTimeout(2000);            
            // 发送POST请求必须设置如下两行
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setDoInput(true);            
            // 获取URLConnection对象对应的输出流
            PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());            
            // 发送请求参数            
            //post的参数 xx=xx&yy=yy            
            printWriter.write(post);            
            // flush输出流的缓冲            
            printWriter.flush();            
            //开始获取数据
            BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
            ByteArrayOutputStream bos = new ByteArrayOutputStream();            
            int len;            
            byte[] arr = new byte[1024];            
            while ((len = bis.read(arr)) != -1) {
                bos.write(arr, 0, len);
                bos.flush();
            }
            bos.close();
            JsonParser parse = new JsonParser();            
            return (JsonObject) parse.parse(bos.toString("utf-8"));
        } catch (Exception e) {
            e.printStackTrace();
        }        
        return null;
    }

如果需要用到登录情况,可以先发送登录请求保存cookie,第二次发送就可以请求了

(4)保存cookie

通过这两行代码就可以把网站返回的cookie信息存储起来,下次访问网站的时候,自动帮你把cookie信息带上。

//存储cookie
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);

通过返回的json获取值(子节点)

JsonElement cookie = res.get("data").getAsJsonObject().get("cookie");

超时无响应问题设置

//连接超时 单位毫秒
httpURLConnection.setConnectTimeout(10000);
//读取超时 单位毫秒
httpURLConnection.setReadTimeout(2000);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 发送http GET/POST请求 的相关文章

随机推荐

  • Java中的异常

    Java中的异常 1 什么是异常 2 异常的类结构 3 运行时异常的特点 4 编译时异常特点 5 对受检异常进行处理 5 1 try catch 捕获处理 5 2 finally子句处理 5 3 finally子句 5 4 throws抛出
  • java案例之制作系统

    java案例之制作系统 案例 需求 定义一个方法 可以接收中奖号码的数组 用户选号的数组 根据命中红球数和篮球数判断最终的结果并输出 分析 系统需要三部份 第一部分是 生成随机产生的7位数双色球数字 其中前6位是红球 第7位是蓝球 红球范围
  • 使用MySQL Workbench建立数据库,建立新的表,向表中添加数据

    点击上图中的 加号 图标 新建一个连接 如上图 先输入数据库的账号密码 帐号默认为root 填好密码后 点击 OK 连接就建立好了 建立完成后 会出现一个长方形的框框 双击它 出现下图所示页面 点击图中的红圈里的按钮 新建一个Schema
  • 图的深度优先遍历(递归与非递归算法)和广度优先遍历

    老师的题目 实验内容 已知某地区的公路网以图表示 图中的顶点表示站点 任意两站点间的路段以带权的边构成的邻接矩阵表示 矩阵中非零元表示两个站点间存在直接的路段 否则没有路段 打开E Test文件夹中的exp06 cpp文件 补充编写所需代码
  • html做成小程序,微信小程序——简单静态网页的制作

    一 前言 需要知识 HTML CSS 注意 微信小程序的语法与HTML和CSS不太相同 但本质是一样的 要求 进入开发者工具并且创建一个测试小程序 选择建立快速模板 在pages目录底下新建一个first的文件夹 其中包括指定的四个文件 并
  • react 组件逻辑复用

    组件逻辑复用 React为什么设计成组件化的形式 其实最大的原因就是为了方便复用 然而组件的复用虽然方便 逻辑的复用却很麻烦 因为state的存在 逻辑被锁死在组件内部 很难分离出去 下面以一个可以改变背景色的步进器为例 展示react中常
  • 复制PDF文字时去掉换行符

    问题描述 当我们在pdf上复制文字时 每行总会出现换行符 乱糟糟的 解决方法 注意 windows推荐开源软件cpoy gihub copy 临时使用 推荐网页 文字替换在线处理工具 在快捷指令中新建 快捷服务 选择执行shell脚本 写这
  • 苹果开发者ADP协议第3.2(f)节违反

    相信很多开发者都遇到过 ADP协议第3 2 f 节违反 导致账号被封 遇到这种情况基本没戏 不用再联系苹果了 基本没戏 以下是被封的邮件信息 Hello xxx This letter serves as notice of termina
  • DSP CCS 12.00运用, 产生正弦波的图像 芯片:F28335

    1 首先建立新的项目 工程 2 参数选择 3 设置数据 保证与芯片得连接 4 整理思路 信号频率 1000 HZ 采样频率 20000 HZ 采样点数 128 5 代码 头文件的定义 include stdio h include math
  • vue-aplayer在手机移动端的时候默认没有总时长,点击播放才显示总时长问题

    前言 在移动段使用vue aplayer这款音频播放组件的时候 发现他默认的时候看不到总时长 只有点击播放才能看到 我的数据是从后台直接拿来的 观察官网没有这个问题 既然出现问题就得解决问题 这里分享下我的解决办法 解决办法一 尝试过但是不
  • C语言中 char str[] 与 char *str 的关系

    首先 我们得明确 在C语言中 没有真正的字符串类型 所以 就诞生了 字符串数组 这么个类型 于是 当我们想申明一个字符串变量时 大体上有下面两种方法 char str hello char p hello str 它定义的是一个字符串数组变
  • golang-- 字典树

    一 前言 看了百度团队在 infoq 上发表的一篇 如何在秒级完成词表匹配 https xie infoq cn article 97b2df7e41456335627ce4cd4 的文章 文章业务背景介绍的很清楚 里面有提到字典树 看到结
  • __attribute__((aligned(n)))和__attribute__((packed))

    绪 attribute 是GUN C中极具特设的一大机制 可以用来设置 函数属性 Function Attribute 变量属性 Variable Attribute 类型属性 Type Attribute 这里我们主要阐述用 attrib
  • Win10禁用驱动签名,进入测试模式

    以系统管理员权限打开CMD控制台 执行 bcdedit exe set TESTSIGNING ON 点击 开始 gt 设置 打开 windows设置 对话框 在搜索框中输入 更改高级启动选项 点击 高级启动 下面的 立即重新启动 按钮 然
  • python中class类的可迭代实现以及迭代函数

    当定义一个普通的类时 指向类的实例默认情况下是不可迭代的 如下 In 3 from collections import Iterable In 4 class Fruit object def init self self item li
  • 【C语言】typedef struct和直接struct的区别

    例一 struct char a int b x 这里 创建了一个变量 包含两个成员 一个字符 一个整数 例二 struct STUDENT char name int age 这里 创建了一个标签 tag 为成员列表提供了一个STUDEN
  • TSNE—聚类结果可视化

    文章目录 一 TSNE参数解析 二 案例 TSNE的定位是高维数据可视化 对于聚类来说 输入的特征维数是高维的 大于三维 一般难以直接以原特征对聚类结果进行展示 而TSNE提供了一种有效的数据降维模式 是一种非线性降维算法 让我们可以在2维
  • 机器学习之二分类模型评价指标

    机器学习之二分类模型评价指标 一 二分类模型衡量指标 1 1 混淆矩阵 Confusion matrix 1 1 1 原理 1 1 2 实现 1 2 精确度 Accuracy 1 2 1 原理 1 2 2 实现 1 3 准确率 Precis
  • c++中标识符常量表示方法

    什么是标识符常量 标识符常量又称符号常量 它是指用一个符号来代替一个数值 我们为什么要用它 对于一个在程序中常常出现的数值 我们可以定义一个符号来表示它 好处是修改方便 代码可读性高 例如 在程序中用到了常数 pi 如果每次都写 3 141
  • Java 发送http GET/POST请求

    摘要 HttpURLConnection是一种多用途 轻量极的HTTP客户端 使用它来进行HTTP操作可以适用于大多数的应用程序 HttpURLConnection是Java的标准类 它继承自URLConnection 可用于向指定网站发送