前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python接口测试之HTTP协议

Python接口测试之HTTP协议

作者头像
无涯WuYa
发布2019-04-25 14:10:10
1.6K0
发布2019-04-25 14:10:10
举报
文章被收录于专栏:Python自动化测试

HTTP(HyperText Transfer Protocol)协议是基于应用层的协议,完成客户端发送请求到服务端等一系列的运作流程,中文简称超文本传输协议。HTTP诞生于1989年3月,最初由蒂姆·伯纳斯-李博士提出,目的是实现让远隔重洋的研究者们共享知识的设想。1997年1月发布了HTTP/1.1的版本,也就是目前,比较主流的HTTP协议版本。由于HTTP是基于应用层的协议,因此客户端不需要关注底层的网络细节,连接请求由可靠的传输协议TCP/IP负责。当客户端发送请求给服务端的时候,客户端与服务器之间建立了通信,请求完成后客户端与服务端之间的通信完成,请求流程如下图所示。

具体步骤为:

(1) 在发送请求前,客户端与服务端之间请求建立通信,打开TCP的连接;

(2) 建立TCP连接后,客户端发送请求到服务端;

(3) 服务端收到响应后回复给客户端;

(4) 客户端收到服务端的回应后关闭TCP的连接。

例如,访问百度首页,打开浏览器,输https://www.baidu.com/域名后,按下回车键就可以跳转到百度的首页。在一个完整的HTTP请求流程中,客户端发送HTTP的请求给服务端,这中间需要明确地告诉服务端请求的地址,也就是统一资源定位符URL,URL主要由三部分组成,分别是HTTP协议,服务器地址和资源,例如,地址http://www.cnblogs.com/weke/category/831885.html中,http://是协议,www.cnblogs.com是被请求的服务器,/weke/category/831885.html是请求资源。

在HTTP的协议中,客户端发送请求到服务端的过程中,客户端需要告诉服务端是以什么样的请求方式去请求。在HTTP的协议中,HTTP的请求方法主要为GET,POST,HEAD,PUT,DELETE,CONNECT,OPTIONS和TRACE,最常用的请求方法是GTE和POST,GET指的是从服务端获取资源,POST是向指定资源提交数据进行请求处理。

在HTTP的协议中,客户端发送请求给服务端,服务端响应回复给客户端的同时,还会带上HTTP协议的状态码,关于状态码这部分改天单独的介绍。

由于HTTP是一个无状态的协议,所以也就导致了Cookie技术的发展,Cookie存储在客户端,而对于一些敏感的信息来说,存储在本地显然是不安全的,例如,登录系统的账号和密码,被别人获取后会对个人的隐私造成影响。Session则将信息存储在服务端。使用Session来保持会话,也就是说客户端发送请求后,服务端在接收到客户端的信息后,把Session的信息存储在服务端的数据库中并且记录下来。还是以以上代码为例,把实现的方式修改为Session,修改后的代码如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render,redirect,render_to_response
from django.http import  HttpResponse,Http404,HttpResponseRedirect

# Create your views here.
def index(request):
   username = request.session.get('user', None)
   return render(request,'blog/index.html',locals())

def article(request,year,month):
   return HttpResponse('2004')

def login(request):
   if request.method=='GET':
      return render(request,'blog/login.html',locals())
   if request.method=='POST':
      username=request.POST.get('username',None)
      password=request.POST.get('password',None)
      if username=='wuya' and password=='admin':
         r=redirect('blog:index')
         request.session['user'] = username
         return r
   return render(request,'blog/login.html',locals())

在浏览器中访问http://localhost:8000/blog/login,打开浏览器的调试模式到Network,输入用户名和密码,点击“登录”按钮登录到系统。http://localhost: 8000/blog/login的Response Headers信息如下:

在以上的Set-Cookie服务端会记录客户端登录成功后的SessionID并且存储在服务端的数据库中,数据库存储的SessionID如下图所示。

登录系统成功后,客户端请求头的信息如下:

客户端请求头的Cookie中的SessionID与存储在服务端的SessionID信息一致,因此Session的请求流程为:

(1) 客户端中输入用户名和密码,点击“登录”按钮发送请求到服务端;

(2) 登录成功后,服务端把SessionID存储在数据库中并且在响应头Set-Cookie中记录下SessionID反馈给客户端;

(3) 客户端再次发送请求的时候,在请求头Cookie带上SessionID信息;

(4) 服务端接收到客户端发送的SessionID,会与存储在服务端数据库中的SessionID做校验检查是否存在,如果存在则显示用户的信息;如果不存在就跳转到登录的页面。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档