网络编程

网络编程

一、urllib模块

  python操作网络,也就是打开一个网站,或者请求一个http接口,使用urllib模块。

  urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模块,在python2里面有urllib模块和urllib2模块。

 但是这个方法很比较繁琐,不建议使用。但是我们可以初步了解一下

1、获取网页内容,写入到文件中:

from urllib import request,parse
url = 'ip'
req = request.urlopen(url)  #打开一个url,发get请求
content = req.read().decode() #获取返回结果,但是因为获取的数据是二进制,所以要先经过decode()
fw = open('baidu.html','w',encoding='utf-8')#然后新建打开一个html文件
fw.write(content)#将读取的内容写到HTML文件中

2、获取接口返回结果,做判断:

from urllib import request
import json#需要用到json模块
url='http://ip/api/user/stu_info?stu_name=xiaohei'
req = request.urlopen(url)  #打开一个url,发get请求
content = req.read().decode() #获取返回结果
res_dic = json.loads(content) #返回的结果转成字典
if res_dic.get('error_code') == 0:
    print('测试通过')
else:
    print('测试失败',res_dic)

3、上面两种都是get请求,下面来讲讲POST请求

有参数传入时,用parse拼接参数,请求url,获取结果:

from urllib import request,parse#需要用到parse进行拼接参数
url = 'http://ip/api/user/login'
data = {
    'username':'admin',
    'passwd':'aA123456'
} #请求数据
data = parse.urlencode(data)  #urlencode,自动给你拼好参数
# xx=xx&xx=11
req = request.urlopen(url,data.encode()) #发post请求
print(req.read().decode())

备注:以上看到urllib的用法相对比较麻烦,一步一步操作,必须先打开url,在传入参数,对返回的结果还要在进行编码处理。

requesets模块已经很好地将这几步封装。用起来更方便

 

二、requests模块

这个模块属于第三方模块,需要安装导入。pip install requests

1、发送get请求url:

#1、发get请求
url = 'http://127.0.0.0/api/user/stu_info'
data = {'stu_name':'hwt'}  #请求数据
req = requests.get(url,params=data)  #发get请求
#发get请求,直接写入参数url,和传参data即可自动访问网址,并返回数据。注意:get请求的传参必须用格式  params=参数
#req返回的结果,是一个requests.models.Response对象
print(req.json())  #将返回的数据转换成字典
print(req.text)    #将返回的数据转换成string,json串

2、发post请求

#2 、发post请求
url = 'http://127.0.0.0/api/user/login'
data = {'username':'niuhanyang','passwd':'aA123456'}  #请求数据
req = requests.post(url,data)  #发送post请求
发送post请求,可直接传入参数data,不用写params
print(req.json())#将结果转换成字典

3、入参是json格式

#3、入参是json类型的
import random#因为电话号码是11位,且是唯一的,所以随机产生一个11位数
phone=random.randint(10000000000,99999999999)
url='http://127.0.0.0/api/user/add_stu'
data =  {
    "name":"hwt",
    "grade":"巨蟹座",
    "phone":phone,
    "sex":"",
    "age":20,
    "addr":"河南省济源市北海大道32号"
  }
req = requests.post(url,json=data)#入参是json,在传入参数时要指定  json=参数
print(req.json())

4、带有cookie的post请求

# 4、添加cookie
url = 'http://127.0.0.0/api/user/gold_add'
data = {'stu_id':468,'gold':10000}
cookie= {'hwt':'337ca4cc825302b3a8791ac7f9dc4bc6'}
req = requests.post(url,data,cookies=cookie)#入参带有cookie,在传入参数时,指定  cookies=参数
print(req.json())

5、带有header的get请求

#5、添加header
url = 'http://127.0.0.0/api/user/all_stu'
header = {
    'Referer':'http://api.nnzhp.cn/'
}
req = requests.get(url,headers=header)
print(req.json())#指定  headers=参数

6、上传文件请求

#6、上传文件
url= 'http://ipn/api/file/file_upload'
data = {
    'file':open(r'C:\Users\bjniuhanyang\Desktop\图\6bd9026dt935575932465&690.jpg','rb')
}
#参数,如果上传的是个其他文件,则后面的rb可不写。因为上传的图片会以二进制形式保存,用rb表示读二进制模式。当然如果下载一个文件,则用wb
req= requests.post(url,files=data)#指定 files=参数
print(req.json())

7、下载文件请求

#7、下载文件
url = 'http://up.mcyt.net/?down/46779.mp3'
req = requests.get(url)
fw = open('aaa.mp3','wb')
#mp3格式也是用二进制保存,所以用wb写二进制模式,将对应文件的内容读取到
fw.write(req.content)
#将读取到的内容写到一个文件中。这个文件内容就是下载的文件内容。

 

posted @ 2018-05-25 10:12  懒虫小园  阅读(171)  评论(0编辑  收藏  举报