python3的urllib 模块提供了获取页面的功能。

urllib.request.urlopen(urldata=None, [timeout, ]*cafile=Nonecapath=Nonecadefault=Falsecontext=None)

-         url:  需要打开的网址

-         data:Post提交的数据

-         timeout:设置网站的访问超时时间

直接用urllib.request模块的urlopen()获取页面,page的数据格式为bytes类型,需要decode()解码,转换成str类型。

  1. import urllib.request
  2.  
  3. # import json
    # import requests
    url="http://api.nnzhp.cn/api/user/stu_info?stu_name=xiaohei"
    req=urllib.request.urlopen(url)
    res=req.read().decode()
    print(res)

执行:

{
        "error_code": 2,
        "msg": "无结果"
}

urllib 中实现post数据请求

urlopen()的data参数默认为None,当data参数不为空的时候,urlopen()提交方式为Post。

  1. url1='http://api.nnzhp.cn/api/user/login '
    data={
    'username':'niuhanyang',
    'passwd':'aA123456'
    }
    #urlencode()主要作用就是将url附上要提交的数据。经过urlencode()转换后的data数据为?username=niuhanyang&passwd=aA123456,
    ## Post的数据必须是bytes或者iterable of bytes,不能是str,因此需要进行encode()编码
    data=urllib.parse.urlencode(data).encode('utf-8')
    #最终提交的url是http://api.nnzhp.cn/api/user/login?username=niuhanyang?passwd=aA123456
    req=urllib.request.Request(url1,data=data)
    page=urllib.request.urlopen(req).read()
    print(page.decode())

执行查看结果:

{
        "error_code": 0,
        "login_info": {
                "login_time": "20180129202722",
                "sign": "7e4c46e5790ca7d5165eb32d0a895ab1",
                "userId": 1
        }
}

我们看到使用urllib会比较麻烦,需要转码,赋值等操作,request模块可以更加简便的完成请求操作,如下:

1、首先需要安装Request模块

pip install requests

2、导入request模块

import requests

各种接口操作如下:

  1. import requests
    import json
    #发送无参数的get请求
    url='http://www.baidu.com'
    req=requests.get(url)
    print(req.text)#返回的字符串类型
  2.  
  3. #发送有参数的request请求
    url1='http://api.nnzhp.cn/api/user/stu_info?stu_name=feifei'
    req1=requests.get(url1)
    print(req1.json())#返回的字典列表
  4.  
  5. #发送post请求
    url2='http://api.nnzhp.cn/api/user/login '
    data={
    'username':'niuhanyang',
    'passwd':'aA123456'
    }
    req=requests.post(url2,data)#发送的post氢气,第一个参数是url,第二个参数是请求的数据
    print(req.json())
  6.  
  7. #发送入参是json类型的post请求
    url3='http://api.nnzhp.cn/api/user/add_stu'
    data={
    'name':'feifei',
    'phone':'13121111112',
    'grade':'1000'
    }
  8.  
  9. req=requests.post(url3,json=data)
    print(req.json())
  10.  
  11. #发送带有cookie的post请求
    #添加cookie
    url4='http://api.nnzhp.cn/api/user/gold_add'
    data={
    'stu_id':230,
    'gold':88888
    }
    cookies={'feifei':'a2b454c3830e20e7d9916f6b52d6a3a7'}
    req=requests.post(url4,data,cookies=cookies)
    print(req.json())
  12.  
  13. #发送带有Referer请求的post请求
    #
    url5='http://api.nnzhp.cn/api/user/all_stu'
    data={
    'Referer':'http://api.nnzhp.cn/'
    }
    req=requests.get(url5,headers=data)
    print(req.json())
  14.  
  15. #下载文件请求
  16.  
  17. url6='https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1517138333609&di=327abc49fc6d63fed19124cdf826d130&imgtype=0&src=http%3A%2F%2Fimg4.duitang.com%2Fuploads%2Fitem%2F201510%2F17%2F20151017223821_ZSWBc.jpeg'
    r=requests.get(url6)#下载直接请求url然后进行保存
    #print(r.status_code)#请求状态码是二进制
    res=r.content#获取二进制格式
    fw=open('feifei.jpg','wb')
    fw.write(res)#保存文件
    fw.close()
  18.  
  19. #上传文件
  20.  
  21. url7='http://api.nnzhp.cn/api/file/file_upload'
    f=open('E:\\besttest\\python\\besttest_code\\练习\\day7笔记\\api\\feifei.jpg','rb')
    r=requests.post(url7,files={'file':f})
    print(r.json())
    #
  1. #下载页面
    url='http://www.runoob.com/python/python-intro.html'
    r=requests.get(url)
    f=open('python.html','wb')
    f.write(r.content)
    f.close()
  1.  
  1.  

python自动化测试学习笔记-6urllib模块&request模块的更多相关文章

  1. python自动化测试学习笔记-9python的日志模块

    参考 logging模块,用来处理python中的日志: import logging logging.debug('debug')logging.info('info')logging.warnin ...

  2. python自动化测试学习笔记-8单元测试unittest模块

    官方参考文档:http://docs.python.org/2.7/library/unittest.html unittest是一个python版本的junit,junit是java中的单元测试框架 ...

  3. python自动化测试学习笔记-5常用模块

    上一次学习了os模块,sys模块,json模块,random模块,string模块,time模块,hashlib模块,今天继续学习以下的常用模块: 1.datetime模块 2.pymysql模块(3 ...

  4. python自动化测试学习笔记-4常用模块

    常用模块 1.os 2.sys 3.random 4.string 5.time 6.hashlib 一.os模块 os模块主要用来操作文件.目录,与操作系统无关.要使用os模块首先要导入OS模块,用 ...

  5. 【Python】学习笔记十二:模块

    模块(module) 在Python中,一个.py文件就是一个模块.通过模块,你可以调用其它文件中的程序 引入模块 先写一个first.py文件,内容如下: def letter(): print(' ...

  6. python自动化测试学习笔记-6excel操作xlwt、xlrd、xlutils模块

    python中通过xlwt.xlrd和xlutils操作xls xlwt模块用于在内存中生成一个xls/xlsx对象,增加表格数据,并把内存中的xls对象保存为本地磁盘xls文件; xlrd模块用于把 ...

  7. python基础学习笔记——shelve、shutil模块

    shelve 我们之前学了json和pickle模块 这些都是序列化的模块,咱们进行在讲一个序列化的东西 叫做shelve 你们肯定有个疑问,这个东西和那个类似为什么要讲.是因为这个模块比较简单的,并 ...

  8. python自动化测试学习笔记-1

    一.什么是自动化 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.直白的就是为了节省人力.时间或硬件资源,提高测试效率,便引入了通过软件或程序自动化执行测试用例进行测试: 二.python ...

  9. python自动化测试学习笔记-9测试框架

    学习了这么久的python,我们已经可以自己搭建一个简单的测试和框架了,先从简单的开始,有时我们编写接口的测试用例会用excel进行编写,以下面的接口测试用例模板为例,进行编写:

随机推荐

  1. 斯特林公式 hdu1018

    杭电上面1018>>点击测试<< 思路:当问到阶乘的值时候,用万进制来写:但是问阶乘值的位数的时候,就可以用斯特林公式了 log10(2*pi*n)/2+n*log10(n/e ...

  2. hdu 5122(2014ACM/ICPC亚洲区北京站) K题 K.Bro Sorting

    传送门 对于错想成lis的解法,提供一组反例 1 3 4 2 5同时对于这次案例也可以观察出解法:对于每一个数,如果存在比它小的数在它后面,它势必需要移动,因为只能小的数无法向右移动,而且每一次移动都 ...

  3. BZOJ 1565 Luogu P2805 [NOI2009]植物大战僵尸 (Tarjan判环、最小割)

    我: "立个flag 14点之前调完这题" 洛谷AC时间: 2019-06-24 14:00:16 实力打脸... 网络流板子从来写不对系列 题目链接: (BZOJ) https: ...

  4. IIS301重定向:将不带www的域名跳转到带www上

    首先你的域名有这两条解析记录 进入服务器IIS,添加2个站点,如下图 第一个正常绑定你的域名:www.baidu.com 第二个绑定不带www的域名:baidu.com 然后点开ncgd-no-www ...

  5. Ioc思想

    DIP: Dependency Inversion Principle 依赖倒转原则 高层次组件不应该依赖于低层次组件,二者均应该依赖于接口.抽象不应该依赖于细节,细节应该依赖于抽象. IOC:Inv ...

  6. RabbitMQ-rabbitmqctl和插件使用(四)

    rabbitmqctl 说明 进入mq的bin目录 cd /usr/local/Cellar/rabbitmq/3.7.8/sbin ./rabbitmqctl [-n node] [-t timeo ...

  7. nyoj_600_花儿朵朵_201404162000

    花儿朵朵 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 春天到了,花儿朵朵盛开,hrdv是一座大花园的主人,在他的花园里种着许多种鲜花,每当这个时候,就会有一大群游 ...

  8. SiteMesh2-sitemesh.xml的ConfigDecoratorMapper映射器的用法

    继上一次的示例工程http://www.cnblogs.com/EasonJim/p/7083165.html,使用的就是ConfigDecoratorMapper映射器,通过指定目录下的页面,都同一 ...

  9. JFrame实现批量获取Android安装包安全证书MD5

    今天遇到一个需求.获取全部apk的签名的MD5.以下是我使用Java SE实现的一个工具.贴出核心源码.希望给有须要的朋友有所帮助. 界面例如以下: 仅仅须要制定.apk文件所在的文件夹就可以,核心代 ...

  10. golang中select case 的用途到底是啥

    https://nanxiao.gitbooks.io/golang-101-hacks/content/posts/select-operation.html ------------------- ...