1.知识准备
HTTP 访问原理
HTTP 协议则是web服务器和web客户端达成的一种可靠的数据传输协议
确保数据在传输的过程当中不会损坏或者产生混乱
WEB 客户端和服务器
Web内容都是存储在Web服务器上的。Web服务器所使用的是HTTP 协议,因此经常会被称为 HTTP 服务器
资源和媒体类型
web 服务器是 web 资源的宿主,而 web 资源就是我们常见的 web 内容的源头,最简单的 web 资源就是 我们服务器中的静态文件:文本文件,HTML 文档,JPEG 图片文件,AVI 文件等等
当然 web 资源也可以是动态生成的,类似搜索引擎生成的页面,QQ 空间的动态等,总之,所有类型的内容来源都是资源
因特网上有数千种不同类型的数据类型,HTTP 在传输的过程中为每个传输的数据都打上了名为MIME类型的数据类型标签(格式:两级分类—一级:text(文本),image(图像),audio(音频),video(视频),application(应用数据),multi-part(复合内容);二级:image/gif(GIF图片)等),描述并标记多媒体内容。
URL
统一资源定位符(Uniform Resource Locator)是资源标识符最常见的形式。URL描述了一台特定服务器上某资源的特定位置。 互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
大部分 URL 都遵循一种标准格式,这种格式包含三个部分。
URL的第一部分被称为方案, 说明了访问资源所使用的协议类型。 通常是 HTTP 协议(http://)
第二部分给出了服务器的因特网地址(比如,www.itheima.com)
其余部分指定Web 服务器上的某个资源(比如, /static/image/common/zixuelogo.png)。
HTTP方法
HTTP支持几种不同请求和命令,这些命令被称为HTTP方法,每条 HTTP 请求报文都包含一个方法。 这个方法会告诉服务器要执行什么动作(获取一个 Web 页面、发送一段信息、删除一个文件等)
请求方法 | 描述 |
GET | 获取一个URL指定的资源,即资源实体 |
POST | 向服务器提交数据 |
PUT | 向服务器提交数据,多次请求会覆盖原来的操作 |
DELETE | 请求源服务器删除Request-URI标志的资源 |
HEAD | 获取一个指定资源的头信息 |
OPTIONS | 获取服务器支持的方法 |
状态码
每条 HTTP 响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作。
状态码 | 定义 | 说明 |
1xx | 请求被接受 | 一般只在实验环境下使用 |
2xx | 成功 | 操作成功的收到,理解和接收 |
3xx | 重定向 | 为了完成请求,进行进一步措施 |
4xx | 用户端错误 | 请求的语法有错误或者不能完全被满足 |
5xx | 服务器错误 | 服务器无法完成明显有效的请求 |
例:
HTTP状态码 | 描述 |
200 | 文档正确返回 |
301/2 | 永久/临时重定向 |
304 not modified | 未修改(原有的缓存可以继续使用) |
404 | 请求的网页不存在 |
503 | 服务器暂时不可用 |
500 | 服务器内部错误 |
报文
HTTP报文是纯文本,不是二进制代码,方便人们读写。
请求报文:从Web客户端发往Web服务器的 HTTP 报文
响应报文:从服务器发往客户端的报文
HTTP 报文包括以下三个部分:
起始行:
请求行部分由请求方法(GET,POST等),请求路径,协议版本组成。
响应行部分由协议版本,状态码,状态文字组成。
首部字段:
起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号来分隔。首部以一个空行结束。
主体:
请求主体中包括了要发送给 Web 服务器的数据;响应主体中装载了要返回给客户端的数据。
起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据如图片、视频、音轨、软件程序、文本等。
①Httpbin.org可模拟报文;②6打开网页后通过按键F12查看报文
API(应用程序接口/应用编程接口):
①概念:操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令
通过 API 接口实现计算机软件之间的相互通信。API 的一个主要功能是提供通用功能集。程序员通过调用 API 函数对应用程序进行开发,可以减轻编程任务。
②形式:函数、类、对象(已编译好的代码、程序提供给大众使用)
[例1]研发人员A开发了软件A,研发人员B正在研发软件B。
有一天,研发人员B想要调用软件A的部分功能来用,但是他又不想从头看一遍软件A的源码和功能实现过程,怎么办呢?
研发人员A想了一个好主意:我把软件A里你需要的功能打包好,写成一个函数;你按照我说的流程,把这个函数放在软件B里,就能直接用我的功能了!
其中,API就是研发人员A说的那个函数。[例2]我们如何告诉操作系统打开文件呢?
看似简单的操作到底层都非常复杂,打开文件首先要扫描硬盘,找到文件的位置,然后从文件中读取一部分数据,将数据放进I/O缓冲区,放进内存;这些数据都是0、1序列,还要对照ASCII表或Unicode表”翻译“成字符,再在显示器上显示出来,过程操作非常复杂。怎么办呢?操作系统想了一个很好的办法,它预先把这些复杂的操作写在一个函数里面,编译成一个组件(一般是动态链接库),随操作系统一起发布,并配上说明文档,程序员只需要简单地调用这些函数就可以完成复杂的工作,让编程变得简单有趣。这些封装好的函数,就叫做API,即应用程序编程接口。
③提供方:编程语言标准库、第三方组织机构、公司等
④作用:省略底层操作细节、实现常用功能——简化工作,提高效率
2.企业微信API调用
本质上就是发送http请求给企业微信后台(通过第三方(企业微信)调用其已封装的包(API))
简单理解一下,企业微信给出的简易教程,就是教我们用http模拟工具从企业微信平台获得它的相关API(相关功能包),实现发送功能,然后自己编写代码部分实现自定义消息发送的对象、内容等
达到发送消息目的的大致一个流程:请求access调用接口 → 使用接口完成自定义操作
Step1:准备工作
①登录企业微信管理端 -> 应用与小程序 -> 应用 -> 自建,点击“创建应用”,设置应用logo、应用名称等信息,创建应用。
创建完成后,在管理端的应用列表里进入该应用,可以看到agentid、secret等信息;该应用会自动出现在成员的企业微信上
常总的自建应用:
AgentId:1000002
Secret:DbnoLcG2watgEgBxjldtC2Kj6Kzylu7JCXIOKt5Pgow
②企业号对应唯一ID:cropid
③https://www.postman.com 下载postman用于 模拟http请求、调试API
Step2:调试API
使用http模拟工具 → 模拟http请求 → 调试API
Q:为什么要这样调试?
A:企业微信的API调用 本质上就是发送http请求给企业微信后台
①获取access_token:
access_token是应用调用API的凭证,由corpid和corpsecret换取(企业账号密码)
每个应用有独立的secret,获取到的access_token只能本应用使用,所以每个应用的access_token应该分开来获取
请求方式:GET(HTTPS)
URL:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET
corpid和secret注意换成本抱团取暖小组公司自己个儿的!!!
返回参数:
开发者需要缓存access_token,用于后续接口的调用,由于企业微信每个应用的access_token是彼此独立的,所以进行缓存时需要区分应用来进行存储
②构造消息体:
接着刚才用http方法请求来的那一小段代码往后写自定义内容,相当于用了现成的发消息功能模块,现在接着写代码,加入自定义部分(发给谁?发什么?)
概念补充:
成员userid:即账号(登陆企业微信后台 → 通讯录 → 成员详情)
部门ID
linked_id:互联ID,此ID可以在管理后台-通讯录-互联企业-详情里查看
消息体(body):
③发送消息:
如下图示,以上面两步得到的access_token和消息体为参数,在postman中发送post请求即可(红色箭头所指为需要注意的点)
常见问题:
40008:代码中有错误(如agentid、touser不存在;msgtype类型不正确等)
48002:权限:修改API只读通讯录为可修改
(抱团取暖小组的)
通讯录secret:LMowPhEqtueQ2FzrUgYg8G8MTPQhCwy58reUr59zTsY
如果发送成功,返回页面为:
接收方相应软件中收到显示
即:调试成功