网站首页 > 技术文章 正文
HTTP协议
HTTP协议(也叫作超文本传输协议):规定了请求和响应格式。通俗来说就是互联网的一种网络传输协议,所有的网页的请求响应都必须遵守这个标准。比如客户端发送信息请求/pig页面,那么服务端就要回复信息OK,页面已返回作为响应,目的就是让信息能够快速准确的传达。
HTTP请求格式
HTTP请求由请求行、请求头、请求体组成。
HTTP请求行
HTTP请求行结构是:请求方式 + 路由 + HTTP版本
- 请求方式:也叫请求方法,就是告诉服务器要执行什么操作,比如GET请求,除了GET,还有删除、更新等请求方式。
- 路由:对应flask中route方法绑定的地址/pig,刚才的请求方式就表示要执行什么操作,那对谁进行操作呢?就是对这里的路由。
- HTTP版本:HTTP协议最初是一个版本,后来根据新需要,更新一部分内容,就命名为新的版本号。目前最新的是2.0版本,使用较多的是1.1版本。
HTTP请求头
请求头由关键字和值组成,每行一对,关键字和值用英文冒号:分隔。,比如 Accept:*/*表示浏览器可接受的文件类型,Host: 127.0.0.1:8000表示主机和端口号,User-Agent: HTTPie/2.0.0表示浏览器类型。
HTTP请求体
HTTP请求体也叫请求正文,结构是也是关键字和值 组成,关键字和值用等于号连接,多个“关键字=值”中间用“&”符号连接。举例:比如登录请求中,要发送 用户名和密码,就是name=tom&password=1234。
HTTPie
想要查看请求信息,就要用到HTTPie这个工具,它是一个 HTTP 客户端,可以发送任意 HTTP 请求,不过需要我们安装一下,执行pip install httpie命令即可。打开cmd 命令窗口,输入http关键字 然后输入请求的url 最后,加入参数-v表示打印请求和响应信息。
GET请求参数:form表单
表单就是用来将数据打包,发送给服务器的工具。其实也可以使用form表单提交GET请求参数给服务器。
首先在form表单中可以添加属性method='get',表示请求方式是GET。然后在input标签中,给name属性赋值为kw,这样,在提交表单后,会在URL末尾加上问号?,问号后面加上“参数=值”这样的字符串,这里的参数就是kw,值就是在input框里输入内容 “鸡蛋汤”。以这种方式将数据添加在url中传递给服务器。
<form class="order" action='/order' method="get">
<input type="text" name='kw'>
<input type="submit" value="确定">
</form>
request
GET请求没有请求体,所以发送请求的时候有请求行和请求头,请求行又包含路由、请求方式等。请求头包含浏览器类型、主机端口号等。
那么多内容,格式也不一样,我们自己整理很麻烦,flask早就给我准备了一个小助手,这个助手就是request。把请求中所有的内容都装在了口袋里,比如有请求头信息headers,请求地址url,还有参数信息args,GET请求参数就可以通过它得到!
接收GET请求参数
首先从flask模块中导入request,然后通过request.args.get()方法获取GET请求传递的数据,参数kw。kw就是form表单中input标签的name属性值。
项目目标:模拟百度搜索页面,在搜索框中输入关键字,点击百度一下,发送请求给服务器,服务器接收到搜索的内容,返回响应,内容就是要搜索的关键字。
首先客户端发送的是GET请求,地址是/search,携带参数,用问号拼接在地址后面。然后服务器接收GET请求数据,返回:查询的信息是XXX。
from flask import Flask, render_template, request
app = Flask(__name__)
app.debug = True
@app.route('/', methods=['GET'])
def baidu():
return render_template('baidu.html')
@app.route('/search', methods=['GET'])
def search():
# 在下方写你的代码:获取GET请求传递的数据
key_words = request.args.get('kw')
return '<h1>您搜索的内容是:%s</h1>' % key_words
app.run(host='127.0.0.1', port=8000)
猜你喜欢
- 2024-10-21 前端工程师进阶:网络请求方法详解,GET和POST的区别
- 2024-10-21 表单提交中的post方法和get方法(表单提交中的post方法和get方法)
- 2024-10-21 如何使用postman做接口测试(菜鸟级攻略)
- 2024-10-21 VB6多线程执行Get请求(基于Curl库)
- 2024-10-21 解Bug之路-记一次调用外网服务概率性失败问题的排查
- 2024-10-21 Java如何发起http请求的实现(GET/POST)
- 2024-10-21 「前端 · 面试 」HTTP 总结(五)——GET 和 POST
- 2024-10-21 第六天二次注入sqlmap简单参数(sqlmap注入攻击实例)
- 2024-10-21 使用cpp-httplib库实现轻松HTTP请求,GET、POST应有尽有
- 2024-10-21 Node实战004:使用http模块处理GET与POST请求
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)