python接口测试之http请求

python的强大之处在于提供了很多的标准库,这些标准库可以直接调用,本节部分,重点学习和总结在接口测试中Python的Http请求的库的学习。

首先来看httplib,官方的解释为:本模块定义了类实现客户端的 HTTP 和 HTTPS 协议。它通常不能直接使用 — — 模块 urllib 用于处理使用 HTTP 和 HTTPS 的 Url。使用httplib来做一个简单的对百度的请求,看这样的一个实现过程,见实现的代码:

#!/usr/bin/env python
#coding:utf-8

import  httplib
def getBaidu():   
   http_client=httplib.HTTPConnection('baidu.com',80,timeout=20)
    http_client.request('GET','')
    r=http_client.getresponse()    
    print  r.status    
    print r.read()

getBaidu()

这里我们详细的来看r提供了那些方法,见输出的结果:

#!/usr/bin/env python
#coding:utf-8

import  httplib
  
def getBaidu():    
   http_client=httplib.HTTPConnection('baidu.com',80,timeout=20)
    http_client.request('GET','')
    r=http_client.getresponse()   
    print dir(r)
 
getBaidu()
见输出的结果内容:
C:\Python27\python.exe D:/git/Python/bookDay/api/http/httplipTest.py
['__doc__', '__init__', '__module__', '_check_close', '_method', '_read_chunked', '_read_status', '_safe_read', 'begin', 'chunk_left', 'chunked', 'close', 'debuglevel', 'fileno', 'fp', 'getheader', 'getheaders', 'isclosed', 'length', 'msg', 'read', 'reason', 'status', 'strict', 'version', 'will_close']

Process finished with exit code 0

使用dir(r)方法可以看到调用的方法,如我们想看到请求百度这样的一个GET请求,到底返回的status code是多少,是否OK,响应内容是什么,headers是什么,见实现的代码和输出的内容:

#!/usr/bin/env python
#coding:utf-8

import  httplib
  
def getBaidu():    
   http_client=httplib.HTTPConnection('www.baidu.com',80,timeout=20)
    http_client.request('GET','/')
    r=http_client.getresponse()    
    print u'状态的状态码:\n',r.status    
    print u'是否请求Ok:\n',r.reason    
    print u'header是多少:\n',r.getheaders()    
    print u'Response消息结构:\n',r.msg    
    print u'响应内容:\n',r.read()

getBaidu()

见输出的结果内容:

C:\Python27\python.exe D:/git/Python/bookDay/api/http/httplipTest.py
状态的状态码:200是否请求Ok:
OK
header是多少:
[('content-length', '14613'), ('set-cookie', 'BAIDUID=5BE300935709382ADC6AFA01D08E1959:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, BIDUPSID=5BE300935709382ADC6AFA01D08E1959; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, PSTM=1481724972; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com'), ('accept-ranges', 'bytes'), ('vary', 'Accept-Encoding'), ('server', 'BWS/1.1'), ('last-modified', 'Mon, 12 Dec 2016 06:09:00 GMT'), ('connection', 'Keep-Alive'), ('x-ua-compatible', 'IE=Edge,chrome=1'), ('pragma', 'no-cache'), ('cache-control', 'no-cache'), ('date', 'Wed, 14 Dec 2016 14:16:12 GMT'), ('p3p', 'CP=" OTI DSP COR IVA OUR IND COM "'), ('content-type', 'text/html')]
Response消息结构:
Date: Wed, 14 Dec 2016 14:16:12 GMT
Content-Type: text/html
Content-Length: 14613Last-Modified: Mon, 12 Dec 2016 06:09:00 GMT
Connection: Keep-Alive
Vary: Accept-Encoding
Set-Cookie: BAIDUID=5BE300935709382ADC6AFA01D08E1959:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=5BE300935709382ADC6AFA01D08E1959; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1481724972; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "Server: BWS/1.1X-UA-Compatible: IE=Edge,chrome=1Pragma: no-cache
Cache-control: no-cache
Accept-Ranges: bytes

下来来看urllib2的库,看官方的解释:urllib2 定义了很多函数和类,这些函数和类能够帮助我们在复杂的情况下获取URLS内容。复杂情况— 基本的和深入的验证, 重定向, cookies 等等.和如上一样,我们使用urllib2来实现对百度的请求,见GET请求的代码:

#!/usr/bin/env python
#coding:utf-8

import  urllib
import  urllib2
  
def get_baidu():
    r=urllib2.urlopen('http://www.baidu.com')    
    print u'Response code:\n',r.getcode(),r.msg    
    print u'headers:\n',r.headers

get_baidu()

见输出结果的内容:

C:\Python27\python.exe D:/git/Python/bookDay/api/http/httplipTest.py
Response code:200 OK
headers:
Date: Wed, 14 Dec 2016 14:52:28 GMT
Content-Type: text/html; charset=utf-8Vary: Accept-Encoding
Set-Cookie: BAIDUID=55980CB92E6F9F88BF0FF2B73E8607D4:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=55980CB92E6F9F88BF0FF2B73E8607D4; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1481727148; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/Set-Cookie: BD_HOME=0; path=/Set-Cookie: H_PS_PSSID=1429_21422_21120_21553_21408_20927; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "Cache-Control: private
Cxy_all: baidu+435ac15289339958b4bcff45cd341d25
Expires: Wed, 14 Dec 2016 14:51:52 GMT
X-Powered-By: HPHP
Server: BWS/1.1X-UA-Compatible: IE=Edge,chrome=1BDPAGETYPE: 1BDQID: 0xfc9210c000017b10BDUSERID: 0
Transfer-Encoding: chunked
Proxy-Connection: Close

下面使用urllib2实现一个POST的请求过程,见实现的代码:

#!/usr/bin/env python
#coding:utf-8

import  urllib
import  urllib2
  
def get_baidu():
    r=urllib2.urlopen('http://www.baidu.com')    
    print u'Response code:\n',r.getcode(),r.msg    
    print u'headers:\n',r.headers

def post_cun():
    params=urllib.urlencode({'cityId':'438'})
    r=urllib2.urlopen('http://m.cyw.com/index.php?m=api&c=cookie&a=setcity',params)    
    print r.getcode(),r.msg    
    print r.read()post_cun()

见输出结果的json内容:

C:\Python27\python.exe D:/git/Python/bookDay/api/http/httplipTest.py200 OK
{"status":true,"homeUrl":"\/xian"}

原文发布于微信公众号 - Python自动化测试(wuya-python)

原文发表时间:2016-12-14

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏移动开发之家

从Android到React Native开发(二、通信与模块实现)

4、从Android到React Native开发(四、打包流程和发布为Maven库)

12950
来自专栏python爬虫日记

python2.7下urllib2的connection自动close的原因及解决办法

前文介绍了urllib2的常见问题的解决方案,今天来特别讨论下urllib2中短连接问题。

18040
来自专栏Netkiller

实操 Web Cache

实操 Web Cache 摘要 写这篇文章的原因,是我看到网上很多谈这类的文章,多是人云亦云,不求实事,误导读者。 下面文中我会一个一个做实验,并展示给你,说明...

49830
来自专栏DeveWork

通过.htaccess 让WordPress 的上传文件夹更安全

WordPress本身的架构就很安全,但是我们可以做一些优化,让WordPress 更安全。WordPress的图片等文件的上传路径默认是wp-content/...

24090
来自专栏java闲聊

SSM,第一天基于Maven的SSM整合,依赖关系搭建

42450
来自专栏游戏杂谈

HTTP权威指南_摘录

以下内容是摘录自《HTTP 权威指南》(HTTP The Definitive Guide),目前没有中文版,可在google中阅读部分章节。有兴趣想购买的可以...

19120
来自专栏扎心了老铁

springboot mybatis redis 二级缓存

前言 什么是mybatis二级缓存? 二级缓存是多个sqlsession共享的,其作用域是mapper的同一个namespace。 即,在不同的sqlsessi...

64870
来自专栏java相关

SpringBoot集成redis缓存

19030
来自专栏微信公众号:Java团长

抢红包案例分析以及代码实现(四)

对于使用 Redis实现抢红包,首先需要知道的是Redis的功能不如数据库强大,事务也不是很完整.因此要保证数据的正确性数据的正确性可以通过严格的验证得以保证。

26230
来自专栏JAVA后端开发

修复shiro重定向引起的Response for preflight is invalid (redirect)的网络报错问题

最近集成shiro到项目中,遇到该一个报复Response for preflight is invalid (redirect)的问题。

5.7K20

扫码关注云+社区

领取腾讯云代金券