【达内课程】网络通信之HTTP协议和Get请求实例(1)

2023-05-16

文章目录

  • HTTP协议
  • 发送HTTP GET请求
  • 增加参数

HTTP协议

【HTTP协议】
HTTP 协议是超文本传输控制协议
HTTP 协议中定义了客户端与服务端的通信流程与数据交互格式

【网络通信中的长连接与短链接】
长连接:
当客户端与服务端连接成功后,使用该连接处理后续 IO 流操作,连接不关闭

短连接:
当客户端需要向服务端发送请求时,创建连接,一旦服务端返回响应后,客户端接受完毕,连接断开。如果需要再次发送请求,则再次创建连接。

常见长连接案例:
IM(即时通讯)、大型游戏

常见短链接案例:
绝大多数APP都是短链接

使用原则:
能用短连接的就用短连接

【客户端与服务端的通信流程】
HTTP 协议是一款基于短连接的协议。所以 HTTP 协议是一款无状态协议,我们在必要时候需要实现 HTTP 协议的状态管理

【请求数据包的格式】
1、请求行
GET /android_jsp/flight_index.jsp HTTP/1.1
GET:请求方式
/android_jsp/flight_index.jsp:请求资源路径
HTTP/1.1:协议的类型与版本

2、若干消息头 Header
key:value
key:value
用于告诉服务端,客户端的状态以及客户端传递数据的状态信息

3、请求实体
主要用于在 POST 请求下存放请求参数数据

4、响应数据包的格式
①状态行
HTTP/1.1 200 OK
HTTP/1.1:协议的类型与版本
200:状态码
OK:状态描述
②若干消息头
key:value
key:value
通过这些消息头告诉客户端服务端的状态以及服务端传递参数的状态信息。
③响应实体
用于存储具体的响应数据。

【GET/POST两种请求方式的区别】
1、请求参数的存放位置
GET:请求资源路径后用 ? 拼接
POST:请求数据包的请求实体中

2、是否适合传递中文
GET:不适合
POST:适合

3、是否适合大数据量提交
GET:不适合
POST:适合

4、安全性
GET:相对不安全
POST:请求数据包的请求实体中

发送HTTP GET请求

1、创建 URL 对象

URL url = new URL("http://ip:port/app/path");

2、通过 URL 对象获取 HttpUrlConnection:

HttpUrlConnection conn = (强转)url.openConnection();

3、发送请求并且获取响应输入流:

is = conn.getInputStream();)(网络操作,耗时)

4、is 就是服务端返回的响应实体数据,把输入流中的数据读取出来,获取响应字符串

5、解析响应字符串

【栗子】

xml中增加一个 id 为 btn_connect 按钮

MainActivity

public class TestActivity extends Activity {
    private Button btn_connect;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setViews();
    }


    private void setViews() {
        btn_connect = findViewById(R.id.btn_connect);
        btn_connect.setOnClickListener(v -> {
            new Thread() {
                @Override
                public void run() {
                    try {
                        findFlightsByGet();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }.start();
        });
    }

    //使用Get方式发送请求 获取航班数据
    private void findFlightsByGet() throws IOException {
        //URL
        URL url = new URL("http://192.168.3.208:8080/android_jsp/flight_index.jsp");
        //HttpURLConnection
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        //getInputStream
        InputStream is = conn.getInputStream();
        //读取字符串
        StringBuilder respText = new StringBuilder();
        String line = null;
        BufferedReader bf = new BufferedReader(new InputStreamReader(is, "utf-8"));
        while ((line = bf.readLine()) != null) {
            respText.append(line);
        }
        //字符串读取完毕
        Log.d("info", "" + respText);
    }
}

AndroidManifest.xml增加权限

 <uses-permission android:name="android.permission.INTERNET"/>

我们需要抓包观察数据,我们可以 使用Eclipse自带抓包工具 或者 使用Fiddler抓取手机端APP接口数据。建议使用后者

我们可以看到链接是 http://192.168.3.208:8080/android_jsp/flight_index.jsp,其中 192.168.3.208 是链接的网络 ip。

运行程序,点击按钮,观察日志
这里写图片描述
可以查看 Fiddler 的抓包的结果:
在这里插入图片描述

增加参数

链接可以增加参数,如

http://192.168.3.208:8080/android_jsp/flight_index.jsp?date=2021-7-24

所以可以在例子中增加一个Edittext,根据输入的日期进行查询

MainActivity

public class TestActivity extends Activity {
   	......
    private EditText et_date;

	......

    private void setViews() {
        et_date = findViewById(R.id.et_date);
        ......
    }

    //使用Get方式发送请求 获取航班数据
    private void findFlightsByGet() throws IOException {
        String d = et_date.getText().toString();
        //URL
        URL url = new URL("http://192.168.3.208:8080/android_jsp/flight_index.jsp" + ("".equals(d) ? "" : ("?date=" + d)));
        ......
    }
}

可以观察 Fiddler 抓到的链接
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【达内课程】网络通信之HTTP协议和Get请求实例(1) 的相关文章

  • 机器学习基本概念

    文章目录 深度学习和机器学习NLP xff08 Natural language processing xff09 Confusion Matrix 混淆矩阵ROC xff08 Receiver Operator Characteristi
  • ROS Kinetic中OpenCV使用

    ROS Kinetic中OpenCV使用 本文主要记录了ROS Kinetic中OpenCV的使用 xff0c Kinetic完全安装中本身自带了Opencv3 3 1 xff0c 因此在ROS中可以直接用ROS自带的Opencv3 3 1
  • ROS下gazebo不能加载willowgarage世界

    在打开gazebo ros打开williowgarage的时候 xff0c 能够找到willowgarage world的文件 xff0c 但是gazebo不能够加载这个模型 xff0c 主要原因是gazebo的model里面并没有mode
  • Mac OS下安装串口调试工具minicom

    最近在做一个Mac下的ssh调试工具 xff0c 但是出现了一点问题 后来发现居然Mac下有串口调试工具可以用 xff0c 所以果断换串口了 xff0c 是普通PL2303芯片的usb转串口线 接下来说下简单的安装步骤吧 我是勤劳的搬砖工
  • Eclipse等IDE配置Anaconda/Python3开发环境(win10_x64)

    分诊台 正所谓 洞庭揽物 xff0c 各有所怀 xff0c 博客点击 xff0c 也是各有所需 为了能让读者节约时间 xff0c 本小百姓 xff0c 写博客时尽力将博客内容各部分内容解耦 xff0c 但仍保持一定的连贯性 xff0c 并参
  • Linux(树莓派)系统中判断WiFi是否连接上路由器的方法

    之前 xff08 https blog csdn net u010299133 article details 105823339 xff09 介绍过在Linux系统中使用wpa supplicant连接到指定的WiFi路由器的方法 xff
  • FreeRTOS系列|任务相关API函数

    任务相关API函数 1 任务相关API函数 FreeRTOS中有很多与任务相关的API函数 xff0c 大多数是辅助函数 下表是这些与任务相关的API函数功能和描述简介 函数名功能描述uxTaskPriorityGet 查询某个任务的优先级
  • 无人机通信协议:MavLink协议使用

    mavlink的数据封装的结构体以及封装解析的函数都在mavlink代码库中的头文件中 主要的结构体 xff1a E mavlink mavlink include v1 0 mavlink types h MAVPACKED typede
  • 【计算机视觉】Lecture 16:平面单应变换

    动机 xff1a 在平面上的点 回顾 xff1a 正向投影 世界坐标系到相机坐标系的变换 透视矩阵方程 xff08 相机坐标系到成像坐标系 xff09 成像坐标系到像素坐标系 从成像坐标 xff08 x xff0c y xff09 到像素坐
  • 【计算机视觉】Lecture 20:八点法

    提醒 本质 基础矩阵 本质矩阵和基础矩阵都是 3x3 的矩阵 xff0c 用于 编码 两个视图的对极几何 动机 xff1a 给定一张图像中的一个点 xff0c 乘以本质 基础矩阵将告诉我们在第二个视图中沿着哪个极线搜索 本质 基础矩阵总结
  • 【计算机视觉】Lecture 23:光流估计

    流估计 主要概念 xff1a 亮度08好恒定方程 孔径问题 Lucas Kanade算法 回顾 xff1a 由于自身运动产生的场 流 xff08 Flow xff09 xff1a 旋转分量不依赖于场景结构 平移分量随场景 Z 值的变化而变化
  • 【计算机视觉】Lecture 24:视频变化检测

    视频基础 每秒30帧 每一幅图像的处理时间不会太多 因此 xff0c 实时算法往往非常简单 视频图像的主要特征之一是帧间的时间一致性 在1 30秒内帧间变化不大 xff01 检测移动的对象 假设 xff1a 移动的对象是非常重要的 xff0
  • Eigen中基本和常用函数

    Eigen 中矩阵的定义 span class token macro property span class token directive keyword include span span class token string lt
  • 基于四元数的存在外点Wahba问题的可证明最优解

    论文地址 论文视频 文章导读 为什么这次要解读这篇文章 xff1f 因为上次文章 xff08 详见 TEASER 快速且可证明的点云配准算法和代码解读 xff09 旋转求解部分就是用本文中的方法 xff0c 所以本文算是TEASER方法的前
  • 极端外点率下鲁棒配准的多项式时间解

    论文地址 论文视频 文章导读 为什么要解读这篇文章 xff1f 因为之前接连介绍该作者的两个工作 xff0c TEASER 快速且可证明的点云配准算法和代码解读 和 基于四元数的存在外点Wahba问题的可证明最优解 xff0c 前者的未知有
  • 基于拉格朗日对偶的凸全局三维配准

    论文地址 文章导读 最近自己的工作有借鉴这篇文章中用到的拉格朗日对偶 xff0c 然后就细读了文章的内容并且分析了对应的代码 拉格朗日对偶属于凸优化的范畴 xff0c 详细的定义和理论可以在 Convex optimization 一书中进
  • PX4的软件在环仿真

    一 Linux ROS Nodes单机仿真 1 安装ROS Kinetic xff08 参考http wiki ros org kinetic Installation Ubuntu xff09 1 1 添加软件源 sudo sh c ec
  • 让STM32CubeMX带你飞,菜鸟秒变STM32高手

    让STM32CubeMX带你飞 xff0c 菜鸟秒变STM32高手 STM32CubeMX是ST意法半导体近几年来大力推荐的STM32芯片图形化配置工具 xff0c 允许用户使用图形化向导生成C 初始化代码 xff0c 可以大大减轻开发工作
  • Release file for http://xxx/ubuntu/dists/bionic-updates/InRelease is not valid yet报错解决

    参考 https blog 51cto com 5437315 2420097 中说明的原因 原因 xff1a 系统时间与网络时间 xff08 仓库 xff09 的不同导致更新错误 按照这个原因解释 xff0c 我查看了自己虚拟机内ubun
  • 如何在keil官网上下载 STM32包 pack

    https www 360kuai com pc 990a8ec633cf2109c cota 61 4 amp tj url 61 xz amp sign 61 360 57c3bbd1 amp refer scene 61 so 1

随机推荐

  • Makefile学习笔记系列1:一个简单的Makefile

    开启Makefile系列学习前 xff0c 先来个简单的 xff0c 没有子目录结构的例子 xff0c 只有一个makefile文件 目录结构 xff1a Makefile代码 xff1a XX 61 g 43 43 CFLAGS 61 g
  • PID控制算法的C语言实现

    PID控制算法的C语言实现一 PID算法原理 最近两天在考虑一般控制算法的C语言实现问题 xff0c 发现网络上尚没有一套完整的比较体系的讲解 于是总结了几天 xff0c 整理一套思路分享给大家 在工业应用中PID及其衍生算法是应用最广泛的
  • pageCache

    写在前面 在开始正式的讨论前 xff0c 我先抛出几个问题 xff1a 谈到磁盘时 xff0c 常说的HDD磁盘和SSD磁盘最大的区别是什么 xff1f 这些差异会影响我们的系统设计吗 xff1f 单线程写文件有点慢 xff0c 那多开几个
  • 基于Python高光谱遥感影像处理实例

    前言 在写波段配准相关代码时经常需要用到tif影像的波段合成和分解 xff0c 虽然可以用ENVI才处理 xff0c 但是每次都要打开再设置一些参数有些麻烦 xff0c 所以本着 独立自主 自力更生 的原则就写了些脚本来处理这个需求 又写了
  • 基于SIFT的图像Matlab拼接教程

    前言 图像拼接技术 xff0c 将普通图像或视频图像进行无缝拼接 xff0c 得到超宽视角甚至360度的全景图 xff0c 这样就可以用普通数码相机实现场面宏大的景物拍摄 利用计算机进行匹配 xff0c 将多幅具有重叠关系的图像拼合成为一幅
  • PERSIANN 降雨数据使用教程

    一 前言 PERSIANN xff0c 使用人工神经网络从遥感信息中估算降水 xff0c 是一种基于卫星的降水检索算法 xff0c 可提供近乎实时的降雨信息 该算法使用来自全球地球同步卫星的红外 IR 卫星数据作为降水信息的主要来源 红外图
  • 基于Pyqt5快速构建应用程序详细教程

    一 介绍 图形用户界面 xff0c 更广为人知的名称是 GUI xff0c 是当今大多数个人计算机的一个特征 它为不同计算技能水平的用户提供了直观的体验 尽管 GUI 应用程序可能会使用更多资源 xff0c 但由于其点击式特性 xff0c
  • 基于Python的PROSAIL模型介绍以及使用

    1 介绍 PROSAIL是两种模型耦合得到的 SAIL是冠层尺度的辐射传输模型 xff0c 把冠层假设成是连续的且具有给定几何形状和密度的水平均匀分布的介质层 xff0c 从而模拟入射辐射与均匀介质之间的相互作用 xff0c 具体还是挺复杂
  • 可能是最全的FreeRTOS源码分析及应用开发系列

    可能是最全的FreeRTOS源码分析及应用开发系列 FreeRTOS 是一个可裁剪的小型且免费的 RTOS 系统 xff0c 尺寸非常小 xff0c 可运行于微控制器上 其特点包括 xff1a 内核支持抢占式 xff0c 合作式和时间片调度
  • 关于VS中LNK1120与errorLNK2019问题

    最近遇到了该问题 xff0c 再查找了一些资料后 xff0c 发现了针对自己问题的解决方法 xff0c 贴出来让大家一起学习一下 其实如果这两个问题同时出现 xff0c 很可能不是链接库缺了lib xff0c 而是编译中添加的源没有被实例化
  • PCL—低层次视觉—点云分割(基于凹凸性)

    转自 xff1a http www cnblogs com ironstark p 5027269 html PCL 低层次视觉 点云分割 xff08 基于凹凸性 xff09 1 图像分割的两条思路 场景分割时机器视觉中的重要任务 xff0
  • 【ENVI入门系列】13.分类后处理

    原文地址 xff1a ENVI入门系列 13 分类后处理 作者 xff1a ENVI IDL中国 版权声明 xff1a 本教程涉及到的数据提供仅练习使用 xff0c 禁止用于商业用途 目录 分类后处理 1 概述 2 分类后处理 2 1 小斑
  • ENVI神经网络工具参数和使用方法

    原文地址 xff1a ENVI神经网络工具参数和使用方法 作者 xff1a pengheligis xff08 1 xff09 Activation xff1a 选择活化函数 对数 xff08 Logistic xff09 和双曲线 xff
  • 详解使用pscp命令Linux文件上传与下载

    一 上传 2 开始 运行 cmd进入到 dos模式输入以下命令 以下是代码片段 xff1a pscp D java apache tomcat 5 5 27 webapps szfdc rardev 64 192 168 68 249 ho
  • java学习总结及心得体会

    前言 xff1a 哈哈 xff0c 今天是2015年 xff18 月 xff12 号 xff0c 星期日 xff0c 今天是收货的一天 xff0c 很开心 xff0c 很快乐 到底发生了什么呢 xff0c 容我慢慢来 世界很大 xff0c
  • 二进制的表白

    没能提起勇气对她进行表白 xff0c 只能寄托于0 1代码记录下对你的喜欢 01000101 01110110 01100101 01101110 00100001 01001001 00100000 01101100 01101111 0
  • C语言strcat()函数:连接字符串

    头文件 xff1a include lt string h gt strcat 函数用来连接字符串 xff0c 其原型为 xff1a char strcat char dest const char src 参数 dest 为目的字符串指针
  • linux 下TCP通信例程

    TCP server span class token macro property span class token directive hash span span class token directive keyword inclu
  • FreeRTOS系列|消息队列一

    消息队列一 1 消息队列简介 消息队列可以在任务与任务 任务与中断之间传递消息 xff0c 队列可以保存有限个具有确定长度的数据单元 队列可保存的最大单元数目被称为队列的长度 xff0c 在队列创建时需要指定其长度和每个单元 xff08 队
  • 【达内课程】网络通信之HTTP协议和Get请求实例(1)

    文章目录 HTTP协议发送HTTP GET请求增加参数 HTTP协议 HTTP协议 HTTP 协议是超文本传输控制协议 HTTP 协议中定义了客户端与服务端的通信流程与数据交互格式 网络通信中的长连接与短链接 长连接 xff1a 当客户端与