前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[接口测试 - http.client篇] 15 常用API说明及基本的示例

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

作者头像
苦叶子
发布2018-04-09 11:25:54
1.6K0
发布2018-04-09 11:25:54
举报
文章被收录于专栏:开源优测开源优测

概述

在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进行简要说明:

代码语言:javascript
复制
# 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进行简要的说明:

代码语言:javascript
复制
# 读取并返回响应主体
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方法

代码语言:javascript
复制
#-*- 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()

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

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

本文分享自 开源优测 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HTTPConnection
  • HTTPResponse
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档