【从零到一】Android网络编程(二)|(HTTP协议、URL、HttpURLConnection)

本文介绍了Android网络编程中的HTTP协议,详细讲解了HTTP的工作方式、URL的概念,重点阐述了HTTP请求信息的组成部分,包括请求头、请求方法等。此外,还详细解析了HTTP响应信息及HttpURLConnection的使用,包括建立连接、设置参数和读取响应。通过实例展示了如何使用HttpURLConnection下载网络图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1. 什么是HTTP协议?

  简介

  1. HTTP是HyperText Transfer Protocol(超文本传输协议),互联网应用最为广泛的网络协议,所有www文件都必须遵守HTTP协议
  2. HTTP协议最初的目的是提供发布和接收HTML页面的方法
  3. HTTP协议是应用层、面向对象的协议,是Web联网的基础,也是手机联网的常用协议之一
  4. HTTP协议是浏览器客户端服务器端之间数据传输的格式规范

  特点

  1. 支持B/S(浏览器/服务器端)及C/S(客户端/服务器端)模式
  2. 简单快速,客户端向服务器端请求服务时,只需要传输请求方法和路径
  3. 灵活,允许传输任意类型的对象
  4. 无状态协议,对事物处理没有记忆能力
  5. 客户端每发送一次请求都需要服务器回送响应,在请求结束后,回主动释放连接,建立连接到关闭连接的过程称为“一次连接”,HTTP连接使用的是“请求——响应”的方式

2. HTTP的工作方式

在这里插入图片描述
  HTTP1.1增加了持久连接的支持


3. 统一资源定位符——URL

  学习URL之前,让我们了解一下 URI(统一资源标识符)

URI用来唯一地标识一个资源,可以标识任何类型的资源(本地系统资源、局域网资源、互联网资源),web上的可用的每种资源(如HTML文档、图像、视频、程序)都可以用一个URI来定位。

  URL是 统一资源定位符,只能定义网络资源,所以属于 URI的子类 。具体结构如下图:
  在这里插入图片描述

  • http: : 表示网页使用的是HTTP协议
  • host(主机名/域名):可以使用本地域名(如127.0.0.1),也可使用网络域名(如www.baidu.com
  • :port(端口号) :非必须,默认端口号为80
  • path(路径):非必须,包括虚拟目录,文件名,参数部分和锚部分

4. 请求信息——Request

  知道了HTTP协议是浏览器客户端服务器端之间数据传输的格式规范,但是这个规范中具体包含什么内容呢?我们要怎么查看这部分内容呢?我们可以通过软件将通讯的过程拦截下来,就可以查看到具体传递的信息了。浏览器客户端向服务器发送的数据,我们称为HTTP的请求信息——Request
  我们在浏览器中输入网址后回车,这个操作就是浏览器客户端向服务器端发送请求信息。为了查看整个通讯的过程,在拦截时直接右键页面,点击检查。
在这里插入图片描述
  找到Network栏后,再在地址栏回车,就可以在Network栏中看到浏览器向服务器端发送的多个请求。请求数据包括请求行请求头请求数据/实体内容
在这里插入图片描述

 4.1 HTTP请求信息的组成

  1. 请求行:包括请求方式(有8种)、请求资源(URI)和协议版本,格式如下:
    在这里插入图片描述
  2. 请求头:(以下信息,根据请求方式的不同而不全都存在)
  • Accept:浏览器接受的数据类型
  • Accept-Charset:浏览器接受的编码格式
  • Accept-Encoding:浏览器接受的数据压缩格式
  • Accept-Language:浏览器接受的语言
  • Host:当前请求访问的目标地址(肯定存在
  • If-Modified-Since:浏览器最后的缓存时间
  • Referer:当前请求来自哪里
  • User-Agent:浏览器的类型
  • Cookie:浏览器保存的cookie数据
  • Connection:浏览器与服务器的连接状态
  • Date:请求发出的时间
  1. 请求数据/实体内容:只有请求方式为POST时,提交的参数才会放到 请求数据/实体内容 中。

5. 响应信息——Response

  服务器接收到客户端发来的请求后,会进行相应的处理,并向客户端输出信息,称为响应信息——Response。包括响应行响应头响应体/实体内容

 5.1 HTTP请求信息的组成

  1. 响应行:包括协议版本、状态码和状态描述
    在这里插入图片描述
    常见的状态码:
  • 1XX:指示信息——表示请求已被接收,据需处理;
  • 2XX:成功——表示请求已被成功接收、理解、接收;
    (200 OK 客户端请求成功)
  • 3XX:重定向——要完成请求必须进行更进一步的操作;
  • 4XX:客户端错误——请求有语法错误或请求无法实现;
    (400 Bad Request 客户端请求有语法错误,不能被服务器所理解,404 Not Found 请求资源不存在)
  • 5XX:服务器错误——服务器未能实现合法的请求;
    (500 Internal Server Error 服务器发生不可预期的错误,503 Server Unavailable 服务器当前不能成立客户端的请求,一段时间后可能恢复正常)
  1. 响应头:(以下信息,根据响应方式的不同而不全都存在)
  • Location:表示重定向的地址
  • Server:表示服务器的类型
  • Content-Encoding:表示服务器发送给浏览器的数据压缩类型
  • Content-Length:表示服务器发送给浏览器的数据长度
  • Content-Language:表示服务器支持的语言
  • Content-Type:表示服务器发送给浏览器的数据类型及内容编码
  • Last-MoModified:表示服务器资源的最后修改时间
  • Refresh:表示定时刷新
  • Content-Disposition:表示告诉浏览器以下载的方式打开资源
  • Connection:浏览器与服务器的连接状态
  1. 响应体/实体内容:服务器端向库互动传输的实际的数据信息,本质是一堆字节流,可表示文本、图片或其他格式的信息。

  到这里我们就简单讲解了HTTP的理论知识,接下来看看如何运用吧。


6. HttpURLConnection

  在java的java.net包中,有个HttpURLConnection类实现而了访问HTTP协议的基本功能,这个类继承自URLConnection,这两个类都是抽象类URLConnection类代表应用程序和URL之间的通信链接,用于读取/写入此URL引入的资源。简单来说它就是在我们应用程序和访问网络资源的URL之间形成通信的一个对象,通过这个对象就能读取/写入到指定的URL所指定的资源。HttpURLConnectionURLConnection的子类,用来读取/写入HttpURL所指定的资源,每个HttpURLConnection用于生成单个请求

  HttpURLConnection的使用步骤:

  1. 获取网址的URL,并将其转换为URL类对象( new URL(url) )
  2. 打开URL连接( URL.openConnection()方法 )
  3. 建立HttpURLConneciton连接,获取HttpURLConneciton对象
  4. 设置连接参数
  5. 读取/写入具体内容

  接下里我们来看一个获取网络图片的例子,实现步骤如下:

  1. 首先,我们编写一个布局(一个用于显示图片的ImageView、一个用于点击获取网络图片的Button),并在MainActivity中绑定初始化这些控件:

activity_main.xml

<?xml version="1.0" encoding="utf-8"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值