Python学习笔记(七)
用python代码调用接口,使用urllib模块,但是该模块数据必须都是2进制的,比较麻烦
from urllib.request import urlopen from urllib.parse import urlencode url = 'http://1。1.1.1/api/user/login' res = urlopen(url) # 发送get请求 print(res.read().decode()) data = {'username':'niuhanyang','passwd':'aA123456'} res = urlopen(url,urlencode(data).encode()) # 发送post请求 print(res.read().decode())
所以直接使用requests模块更方便使用
发送get请求
import requests url = 'http://1。1.1.1/api/user/stu_info' res = requests.get(url,params={'stu_name':'xiaohei'}) # 发送get请求 print(res.json()) # json直接把返回结果转成字典
发送post请求
url = 'http://1.1.1.1/api/user/login' data = {'username':'niuhanyang','passwd':'aA123456'} res = requests.post(url,data=data) # 发送post请求 print(res.json())
发送入参是json类型的post请求
url = 'http://1。1.1.1/api/user/add_stu' data = { "name":"小黑", "grade":"天蝎座", "phone":12312341234, "sex":"男", "age":28, "addr":"河南省济源市北海大道32号" } res = requests.post(url,json=data) # 发送post请求,入参是json类型的 print(res.json())
发送有cookie的post请求
url = 'http://1.1.1.1/api/user/gold_add' data = { 'stu_id':11, 'gold':200 } cookie = {'niuhanyang':'abd9a0995f4696e1a60133220b32037a'} res = requests.post(url,data=data,cookies=cookie) # 发送post请求,添加cookie print(res.json())
发送有header的post请求
url = 'http://1。1.1.1/api/user/all_stu' header = {'Referer':'http://api.nnzhp.cn/'} res = requests.get(url,headers=header) # 发送get请求,添加header print(res.json())
上传文件
url = 'http://1。1.1.1/api/file/file_upload' data = {'file':open('图片.jpg','rb')} res = requests.post(url,files=data) # 上传文件 print(res.json())
下载文件
url = 'http://qiniuuwmp3.changba.com/1084511584.mp3' res = requests.get(url) print(res.content) # 返回的都是2进制的 with open('魔鬼中的天使.mp3','wb') as f: f.write(res.content) url = 'https://aliimg.changba.com/cache/photo/855e5493-f018-44db-8892-c8660649327b_640_640.jpg' res = requests.get(url,verify=False) # 如果是https的话,加verify=False,不验证证书 with open('图片.jpg','wb') as f: f.write(res.content)
常用方法
res.json() # 必须返回是json的才能用 res.text # 返回的都是字符串,下载文件的话用text不行 res.content # 用来下载文件,返回的是2进制的 res.cookies # 获取到返回的cookie res.headers # 获取到返回的header res.status.code # 获取状态码
异常处理
money = 1000 num = input('please enter a num:') try: num = float(num) res = money/num except Exception as e: # 出现异常,走except下面的代码 print('出现异常了') print('你输入的价格不合法') print(e) raise Exception('主动,错误信息:%s' %e) # raise 主动抛出一个异常 else: # 没有异常走else下面的代码 money -= num print('余额是:%s' %money) finally: # 有没有异常,都会执行 print('zzzzzz')
面向对象编程
类,可以认为是一个模板,比如人类,猫类,狗类,房子类等,实例化一个对象,就是按照房子类,创造一个房子
# 类,类名一般都以大写字母开头 # class House: # 经典类 class House(object): # 新式类 def save(self): print('能住人') a = House() a.save()
人类都有相同的特点,1个嘴巴,2个眼睛,2个耳朵,这些就是类变量,各人之间的名字、年龄,性别都不同,这些就是成员变量。
某个人就剩1个眼睛了,也可以修改这个人的类变量,不会影响其他人的类变量
class Person: # 类,类名一般都以大写字母开头 country = 'China' # 类变量 eyes = 2 ears = 2 mouth = 1 def __init__(self,name,age,sex): # 构造函数 print('开始造人了') # 就是这个类在初始化的时候执行的 self.name = name # 属性,实例变量,成员变量 self.age = age self.sex = sex def cry(self): # 类方法 print('%scrying' %self.name) taotao = Person('taotao',19,'男') # 实例化 taotao.cry() print(taotao.eyes) taotao.eyes = 1 print(taotao.eyes)