一、urllib模块:python自带的模块
1、urllib模块的get请求:
from urllib import urlopen #打开url from urllib.parse import urlencode #get请求: url='https://api.nnzhp.cn/api/user/stu_info' d={'stu_name':'小白'} req=urlopen(url+'?'+urlencode(d)) #get请求的参数要转成二进制 print(req.read()) #返回的结果是bytes类型 print(req.read().decode()) #返回的结果转成字符串
2、urllib模块的post请求:
url='http://api.nnzhp.cn/api/user/login' d={'username':'niuhan','passwd':'123456'} req2=urlopen(url,urlencode(d2).encode()) #post的参数转成二进制 print(req2.read().decode()) #encode():转成二进制,decode()转成字符串
urllib的进制转换比较麻烦,所以一般不用,常用requests来请求接口
二、requests模块:
1.get请求:
url='http://api.nnzhp.cn/api/user/stu_info' url_mp3='http://aliuwmp3.changba.com/userdata/userwork/1128447787.mp3' url_pic='http://pic37.nipic.com/20140113/8800276_184927469000_2.png' d={'stu_name':'矿泉水'} r=request.get(url,d) r=requests.get(url,d) r_mp3=requests.get(url_mp3) r_pic=requests.get(url_pic) print('r.json',r.json()) #返回的是字典 print('r.text',r.text) #返回的是字符串,写文件或写数据库 print('r.content',r.content) #返回的是bypes 用于下载电影、图片
#图片、音乐下载
fw=open('yinyue.mp3','wb') #wb模式写的是bytes类型
fw.write(r_mp3.content)
fw=open('pic.jpg','wb')
fw.write(r_pic.content)
2.post请求:
#基本的post请求 url='http://api.nnzhp.cn/api/user/login/' d2={'username':'niuh','passwd':'123456'} r=requests.post(url,d2) #传url和参数 print(r.text) #当请求中需要有header时: url='https://qun.qq.com/cgi-bin/qun_mgr/get_friend_list' d={'bkn': '1416018'} header={'cookie':'pgv_pvi=6085920768; RK=KD5wYAlob9; ptcz=5cc2a8f5a3bcd0506cc21ba664866b6eb78c6c6f94aa14db64bb62a27ab48746; pgv_pvid=4660937616; o_cookie=945968766; pac_uid=1_945968766; tvfe_boss_uuid=e34b6f14217dffb3; uin=o0945968766; ptisp=cnc; _qpsvr_localtk=0.17181781260384565; pgv_si=s5656426496; skey=@QzCllqyRK; p_uin=o0945968766; pt4_token=Arq7c4vrg*momK5TxkcVXOUZGiMwR16xvqcot9botbI_; p_skey=tMt63t2JH2QYoFlUKOFazsDPQIVlsG-bcukPHJKc6GU_; traceid=bf3e4d7f3c; pgv_info=ssid=s7769900608; ts_last=qun.qq.com/member.html; ts_uid=1696475632'} r=requests.post(url,d,headers=header) #header中可以写user-agent、cookies等信息 print(r.json())
#当请求中需要上传文件 url='http://api.nnzhp.cn/api/file/file_upload' r=requests.post(url,files={'file':open('test','rb')}) #上传文件时,打开文件的rb模式 print(r.text):
3.session():登录完会自己管理cookie ,后边调用的接口,不用再传cookie
session=requests.session() url='http://api.nnzhp.cn/api/user/stu_info' url2='http://api.nnzhp.cn/api/user/login/' d={'stu_name':'矿泉水'} d2={'username':'niuha','passwd':'123456'} r1=session.get(url,params=d) #get方式,传参要用params=XXX r2=session.post(url2,data=d2) #post方式,传参要用data=XXXX print(r1.json()) print(r2.json()) #session: #1.先登录,然后获取cookie、 #2.使用cookie ,直接调用接口 #例如: url4='http://api.nnzhp.cn/api/user/login/' d2={'username':'niuh','passwd':'123456'} url5='http://api.nnzhp.cn/api/pay' r3=session.post(url4,d2) print(r3.json()) print(r3.cookies) #从返回结果中获取cookies session.post(url5) #使用session,先调用了登录接口后,cookie会自动保存,后边再调用的接口,不需要再填写接口