python__网络编程:urllib、requests模块

一、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会自动保存,后边再调用的接口,不需要再填写接口
原文地址:https://www.cnblogs.com/hancece/p/11121985.html