• 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

  • 相关阅读:
    在css中设置图片的背景图,怎么设置图片纵向拉伸
    css左右箭头
    在一个页面上加载另一个页面
    任务:写一个tomcat自启动脚本
    安装配置tomcat
    使用cronolog切割tomcat catalina.out文件
    使用usb+preseed在virtualbox上安装ubuntu(一)
    preseed.cfg分区设定案例
    为什么Linux的fdisk分区时第一块磁盘分区的First Sector是2048?
    zabbix 如何監控tcp的SYN,establised?
  • 原文地址:https://www.cnblogs.com/lizitest/p/6986433.html
Copyright © 2020-2023  润新知