[接口测试 - http.client篇] 14 源码初探及其工作机制分析

概述

http.client模块定义和实现了一系列类用于实现客户端HTTP和HTTPS协议。

一句话说明: HTTP/1.1 client library

注:

  1. 支持HTTP/1.1版本的协议
  2. HTTPS的支持需要安装SSL才行

http.client工作流程

下面我们看一下http.client工作流程机制,以便加深在原理的理解。

(null)
    |
    | HTTPConnection() 建立HTTP链接
    v
Idle
    |
    | putrequest() 准备请求内容
    v
Request-started
    |
    | ( putheader() )*  endheaders() 准备请求头
    v
Request-sent 发送请求
    |\_____________________________
    |                              | getresponse() raises 获取服务端响应
    | response = getresponse()     | ConnectionError
    v                              v
Unread-response                Idle
[Response-headers-read] 响应头读取
    |\____________________
    |                     |
    | response.read()     | putrequest() 自己往下看吧
    v                     v
Idle                  Req-started-unread-response
                    ______/|
                /        |
response.read() |        | ( putheader() )*  endheaders()
                v        v
    Request-started    Req-sent-unread-response
                        |
                        | response.read()
                        v
                        Request-sent

说明:

  1. HTTPConnection通过不同的“状态”定义了HTTP客户的行为状态,管理维护着每一个的request和response
  2. 上述的流程图,详细的说明了各“状态”之间的转换,把上图理解,即把http.client理解透彻了。

http.client的类

下面我们看一下在http.client模块中,定义了哪些类

  • HTTPConnection 一个HTTPConnection实例代表一个与HTTP服务器的事务。
  • HTTPSConnection HTTPConnection的子类,它使用SSL与安全的服务器进行通信。
  • HTTPResponse HTTPResponse的实例代表客户端与服务端成功建立链接后的返回。
  • HTTPException httpc.client模块中的异常基类,其为Exception的子类。

以下均为HTTPException的子类,属于异常类,具体含义这里不一一说明了,大家根据字面意思了解即可

  • NotConnected
  • InvalidURL
  • UnknownProtocol
  • UnknownTransferEncoding
  • UnimplementedFileMode
  • IncompleteRead
  • ImproperConnectionState
  • CannotSendRequest
  • CannotSendHeader
  • ResponseNotReady
  • BadStatusLine
  • LineTooLong
  • RemoteDisconnected

定义的几个常量:

  • http.client.HTTP_PORT HTTP默认端口(80)。
  • http.client.HTTPS_PORT https默认端口(443)。
  • http.client.responses HTTP 1.1状态码映射字典。

例如: http.client.responses[http.client.NOT_FOUND] is 'Not Found'

注:更多的状态码请参加https://docs.python.org/3/library/http.html#http-status-codes

小结

主要让大家了解下http.client工作流程及该模块下有哪些类和常量。

原文发布于微信公众号 - 开源优测(DeepTest)

原文发表时间:2018-02-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Rainbond开源「容器云平台」

Docker源码分析之容器日志处理与log-driver实现

1563
来自专栏玄魂工作室

Python黑帽编程 4.1 Sniffer(嗅探器)之数据捕获(上)

Python黑帽编程 4.1 Sniffer(嗅探器)之数据捕获(上) 网络嗅探,是监听流经本机网卡数据包的一种技术,嗅探器就是利用这种技术进行数据捕获和分析的...

6057
来自专栏游戏杂谈

Node.js + WebSocket 实现的简易聊天室

Firefox 7-9 (Old) (Protocol Version 8) Firefox 10+ (Protocol Version 13) ...

4322
来自专栏FreeBuf

CTF挑战130分 | Rickdiculously 1.0

Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习渗透使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者Vi...

1753
来自专栏散尽浮华

统计代码行数的方法梳理

在日常运维工作中,会碰到对一项项目下的代码行数进行统计的需求,下面对代码行数的统计方法进行梳理,以供参考。 1)最简单的是使用wc -l直接进行代码行数统计。(...

2967
来自专栏开源优测

[接口测试 - http.client篇] 14 源码初探及其工作机制分析

概述 http.client模块定义和实现了一系列类用于实现客户端HTTP和HTTPS协议。 一句话说明: HTTP/1.1 client library 注:...

2868
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(66)-MVC WebApi 用户验证 (2)

前言: 回顾上一节,我们利用webapi简单的登录并进行了同域访问与跨域访问来获得Token,您可以跳转到上一节下载代码来一起动手。 继续上一篇的文章,我们...

3978
来自专栏.NET技术

.net平台的rabbitmq使用封装

  RabbitMq大家再熟悉不过,这篇文章主要整对rabbitmq学习后封装RabbitMQ.Client的一个分享。文章最后,我会把封装组件和demo奉上。

2627
来自专栏颇忒脱的技术博客

基于Cookie的Haproxy防止过速请求的方法

这两种方式都不太好,第一种太过粗粒度,第二种容易误伤(如果多个客户端从同一台路由设备过来)。

3023
来自专栏Golang语言社区

Golang测试技术

本篇文章内容来源于Golang核心开发组成员Andrew Gerrand在Google I/O 2014的一次主题分享“Testing Techniques”,...

4006

扫码关注云+社区

领取腾讯云代金券