1 Python Requests

1 HTTP协议

 2 HTTP协议与Requests库的一致性

3 安装 requests

  • pip install requests

4 请求参数

  • url: 获取页面的url链接
  • params: 增加到url中的参数,字典或字节序列
1 # -*- encoding: utf-8 -*-
2 import requests
3 
4 kv = {'k1':'v1', 'k2':'v2'}
5 resp = requests.get('https://www.baidu.com', params=kv)
6 print resp.url
7 
8 #结果
9 https://www.baidu.com/?k2=v2&k1=v1
  • data:向服务器提交资源,字典、字节序列或文件对象
1 # -*- encoding: utf-8 -*-
2 import requests
3 #用例1
4 kv = {'k1':'v1', 'k2':'v2'}
5 resp = requests.post('https://www.baidu.com', data=kv)
6 #用例2
7 data = '提交字符串'
8 resp = requests.post('https://www.baidu.com', data=data)
  • json:向服务器提交json格式的数据
1 # -*- encoding: utf-8 -*-
2 import requests
3 
4 kv = {'k1':'v1', 'k2':'v2'}
5 resp = requests.post('https://www.baidu.com', json=kv)
  • headers:定制请求的协议头,字典
1 # -*- encoding: utf-8 -*-
2 import requests
3 
4 hd = {'user-agent':'Chrome/10'}
5 resp = requests.post('https://www.baidu.com', headers=hd)
  • cookies:请求中添加cookie,字典或CookieJar
  • auth:支持HTTP认证功能,元组
  • files:向服务器传输文件,字典
1 # -*- encoding: utf-8 -*-
2 import requests
3 
4 fs = {'file':open('data.xls','rb')}
5 resp = requests.post('https://www.baidu.com', files=fs)
  • timeout:请求超时时间,秒
1 # -*- encoding: utf-8 -*-
2 import requests
3 
4 resp = requests.get('https://www.baidu.com', timeout=10)
  • proxies:设定访问代理服务器,可以增加登录认证,字典,防止爬虫被反追踪
1 # -*- encoding: utf-8 -*-
2 import requests
3 
4 pxs = {'http':'http://user:password@1.1.1.1:1234', 'https':'https://1.1.1.1:5678'}
5 resp = requests.get('https://www.baidu.com', proxies=pxs)
  • allow_redirects:重定向开关,True/False,默认True
  • stream:是否对获取内容立即下载,True/False,默认True
  • verify:SSL证书认证,True/False,默认True
  • cert:本地SSL证书路径

5 响应内容

type(resp)                #响应对象
resp.status_code          #状态码
resp.text                #响应内容的字符串形式
resp.content            #响应内容的二进制形式
resp.encoding            #从header中猜测的响应内容编码方式
resp.apparent_encoding    #从内容中分析出来的响应内容编码方式

6 异常处理

requests.ConnectionError    #网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPError            #HTTP错误异常
requests.URLRequired        #url缺失异常
requests.TooManyRedirects    #超过最大重定向次数
requests.ConnectTimeout        #连接远程服务器超时
reqeusts.Timeout            #请求URL超时

resp.raise_for_status()        #如果状态码不是200,引发requests.HTTPError

7 函数封装

 1 def getHTMLText(url):
 2     try:
 3         resp = requests.get(url, timeout=30)
 4         resp.raise_for_status()
 5         resp.encoding = resp.apparent_encoding
 6         return resp.text
 7     except:
 8         return '产生异常'
 9 if __name__ == '__main__':
10     url = 'http://www.baidu.com'
11     print getHTMLText(url)

8 与单元测试框架结合

  • 脚本
 1 # -*- encoding: utf-8 -*-
 2 import requests
 3 import unittest2
 4 import HTMLTestRunner
 5 import time
 6 import sys
 7 
 8 reload(sys)
 9 sys.setdefaultencoding('utf8')
10 
11 class BaiduTest(unittest2.TestCase):
12     '''测试百度接口'''
13     def testNoParam(self):
14         '''没有参数'''
15         #返回response 对象,可以从这个对象中找到我们想要的信息
16         resp = requests.get('https://www.baidu.com')
17         self.assertEqual(resp.status_code, 200)
18 
19 if __name__ == '__main__':
20     #组织用例
21     suite = unittest2.TestSuite()
22     suite.addTest(BaiduTest('testNoParam'))
23     # 报告准备
24     reportName = time.strftime('%Y%m%d%H%M%S')  # 文件名
25     fp = open('../reports/' + reportName + '.html', 'wb')  # 文件路径
26     runner = HTMLTestRunner.HTMLTestRunner(stream=fp,  # 定义报告
27                                            title='test reporter',
28                                            description='interface test reporter Demo')
29     # 执行测试
30     runner.run(suite)
31     #关闭文件
32     fp.close()
  • 结果

 

 

 

 

 

 

2

 

posted on 2017-06-12 19:42  栗子测试  阅读(179)  评论(0编辑  收藏  举报