分享

[接口测试 - http.client篇] 15 常用API说明及基本的示例

 开源优测 2021-12-09

概述

在http.client模块中,我们主要使用HTTPConnection和HTTPResponse对象来处理整个HTTP交互过程,所以我们接下里主要介绍以下内容:

  • HTTPConnection

  • HTTPResponse

  • 基本示例

HTTPConnection

先看一下HTTPConnection初始化定义函数

HTTPConnection(host, port=None, [timeout, ] source_address=None)

参数说明

host: 目标服务器IP或url
port: 目标服务端口(默认值 http: 80, https: 443), 可选参数 timeout: 超时参数, 可选 source_address: 用于标识链接的来源,格式为(host, port)

一个HTTPConnection实例代表着一个http客户端与服务器端的交互事务,在实例化HTTPConnection时,应该传入目标服务主机(IP或url)和端口,如果没有传递端口,则会从主机字符串中解析端口号(例如www.baidu.com:80,则会尝试从该字符串中去解析出80作为交互端口),如果主机字符串中也无端口号,则使用http.client中定义的默认端口(http: 80, https: 443)。如果给出了可选的超时参数(即timeout),则阻塞操作(如连接尝试)将在许多秒之后超时(如果没有给出,则使用全局缺省超时设置)。

下面看下几种初始化的方式:

h1 = http.client.HTTPConnection('www.python.org')

h2 = http.client.HTTPConnection('www.python.org:80')

h3 = http.client.HTTPConnection('www.python.org', 80)

h4 = http.client.HTTPConnection('www.python.org', 80, timeout=10)

h5 = http.client.HTTPConnection('www.python.org', 80, timeout=10, source_address=("www.baidu.com", 80) >

下面一起看看HTTPConnection提供出来的API,我们主要对常用的API进行简要说明:

# http链接初始化# 返回一个HTTPConnetion实例对象

HTTPConnection(host, port=None, [timeout, ]source_address=None)

# https链接初始化# 返回一个HTTPSConnection实例对象
HTTPSConnection(host, port=None, key_file=None,    
   cert_file=None, [timeout, ]source_address=None,
   *, context=None, check_hostname=None)

# 发送http请求
HTTPConnection.request(method,
   url,
   body=None,
   headers={}, *,
   encode_chunked=False)
   
# 获取返回值,获取到的是一个HTTPResponse实例对象
HTTPConnection.getresponse()

# 设置调试级别,默认为0, 即不输出调试信息

# 用于链接出现问题时,打开调试信息,方便定位
HTTPConnection.set_debuglevel(level)

# 设置HTTP隧道,即运行通过代理服务器运行连接
# 注意这里的host、port指定是目标服务端的host和端口
# 不是代理的host和端口
# 代理的host和端口,应当在初始化时指定
# import http.client
# 代理服务器: localhost, 端口 8080
# conn = http.client.HTTPSConnection("localhost", 8080)

# www.python.org为我们的目标交互服务
# conn.set_tunnel("www.python.org")
# conn.request("HEAD","/index.html")
HTTPConnection.set_tunnel(host, port=None, headers=None)

# 连接到创建对象时指定的服务器。
# 默认情况下,如果客户端尚未有连接,则在发出请求时自动调用此功能。
HTTPConnection.connect()# 关闭连接HTTPConnection.close()

# 向服务器发送RFC 822样式的头。
# 它向服务器发送一条行,包括头、冒号和空格,以及第一个参数。
# 如果给出更多的参数,则会发送延续行,每个行包含一个选项卡和一个参数。
HTTPConnection.putheader(header, argument[, …])

# 向服务器发送一条空行,表示头的尾。
# 可选的messagebody参数可用于传递与该请求相关联的消息体。
HTTPConnection.endheaders(message_body=None, *,
   encode_chunked=False)
   
# 将数据发送到服务器。
# 在调用endheader()方法和调用getresponse()之前,
# 应该直接使用该方法。
HTTPConnection.send(data)

HTTPResponse

HTTPResponse实例代表着一个从服务器中获得HTTP响应的实例。

它提供对请求头和实体主体的访问。

响应是一个可迭代的对象。

下面我们一起看下其主要的API,并对API进行简要的说明:

# 读取并返回响应主体
HTTPResponse.read()

# 将响应主体的下一个len(b)字节读取到缓冲区b中,

# 返回读取的字节数。
HTTPResponse.readinto(b)

# 返回头名的值,如果没有标题匹配名称,则返回默认值。
# 如果有不止一个带有name名称的头,则返回由''所连接的所有值。
# 如果“default”是除单个字符串以外的任何可迭代的,
#它的元素也会以逗号的方式返回。

HTTPResponse.getheader(name, default=None)

# 返回一个(header, value)元组的列表

HTTPResponse.getheaders()

# 返回服务器使用的HTTP协议版本。

# 10为http/1.0,11为http/1.1。

HTTPResponse.version

# 返回服务器返回的状态码
# 例如200
HTTPResponse.status

# 返回服务器返回的reason描述
# 例如 OKHTTPResponse.reason

# 返回流的状态# True表示流已关闭
HTTPResponse.closed

示例

下面我们演示下如何使用http.client进行http的GET、POST、HEAD方法

#-*- coding:utf-8 -*-

__author__ = "苦叶子"

import http.client, urllib.parse

if __name__ == "__main__":    print("http.client基本示例")    print("http.client GET方法示例")    
   # 初始化
   conn = http.client.HTTPSConnection("www.python.org")    
   # 发送GET请求    conn.request("GET", "/")    
   # 获取响应
   r1 = conn.getresponse()    
   # 打印状态码、对应说明、协议版本    print(r1.status, r1.reason, r1.version)    
   # 读取整个响应内容
   data1 = r1.read()    
   
   # 下面代码演示如何分chunck读取内容    conn.request("GET", "/")    r1 = conn.getresponse()
   while not r1.closed:        
       # 每次读取200bytes
       r1_data = r1.read(200)        
       if
len(r1_data) == 0:            
           break        print(r1_data)    

   # 请求不存在的url    
   conn.request("GET", "/parrot.spam")    r2 = conn.getresponse()    print(r2.status, r2.reason)    data2 = r2.read()    
   # 断开连接
   conn.close()    print("http.client HEAD方法")    conn = http.client.HTTPSConnection("www.python.org")    conn.request("HEAD", "/")    res = conn.getresponse()    print(res.status, res.reason)    data = res.read()    print(len(data))    conn.close()    print("http.client POST方法")    
   # 请注意这里设置http headers的方法    params = urllib.parse.urlencode({'@number': 19999,        '@type': 'issue',        '@action': 'show'})    
   # http头参数    
   headers = {"Content-type":
       "application/x-www-form-urlencoded",
       "Accept": "text/plain"}    conn = http.client.HTTPConnection("bugs.python.org")    
   # 把请求的data和头参数一起传入    conn.request("POST", "", params, headers)    
   # 获取响应对象    response = conn.getresponse()    
   # 打印响应状态
   print(response.status, response.reason)    
   # 读取响应内容    data = response.read()    print(data)    
   # 关闭连接
   conn.close()

对于其他方面请参照上述示例进行举一反三。



分享软件测试开源技术、经验、方案的首发平台

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多