python基础:网络编程
一、网络编程
简而言之,就是通过代码打开一个url,获得返回结果并做处理。通常所说的python爬虫,就属于网络编程
二、urllib模块进行网络编程
这个方法很繁琐,不建议使用。了解
示例1:
获取一个网页内容,写入文件
from urllib import request,parse
# url = 'http://www.baidu.com'
# req = request.urlopen(url) #打开一个url,发get请求
# content = req.read().decode() #获取返回结果,是二进制,需要先decode()
# fw = open('baidu.html','w',encoding='utf-8')
# fw.write(content)
示例2:
获取接口返回结果,做判断
from urllib import request,parse#导入urllib模块的request和parse
import json
# url='http://127.0.0.1/api/user/stu_info?stu_name=aaa'eq = request.urlopen(url) #打开一个url,发get请求
# content = req.read().decode() #获取返回结果,二进制,要先解二进制decode()为字符串
# res_dic = json.loads(content) #返回的结果转成字典
# if res_dic.get('error_code') == 0:
# print('测试通过')
# else:
# print('测试失败',res_dic)
示例3:
有参数传入时,用parse拼接参数,请求url,获取结果
from urllib import request,parse
url = 'http://api.nnzhp.cn/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.1/api/user/stu_info'
data = {'stu_name':'aaa'} #请求数据,用字典
req = requests.get(url,params=data) #发get请求,直接写入参数url,和传参data即可自动访问网址,并返回数据。注意:get请求的传参必须用格式 params=参数
#req返回的结果,是一个requests.models.Response对象
print(req.json()) #可以把返回数据转换成字典
print(req.text) #把返回数据转换成string,json串
示例2:
发送post请求
url = 'http://127.0.0.1/api/user/login'
data = {'username':'aaa','passwd':''} #请求数据,字典封装
req = requests.post(url,data) #发送post请求,可直接传入参数data,不用写params
print(req.json())#将结果转换成字典
示例3:
入参就是json格式
url='http://127.0.0.1/api/user/add_stu'
data = {
"name":"小1",
"grade":"天蝎座",
"phone":13640000000,
"sex":"男",
"age":28,
"addr":"发斯蒂芬斯蒂芬"
}#参数,json串
req = requests.post(url,json=data)#入参是json,在传入参数时要指定 json=参数
print(req.json())
示例4:
带有cookie的post请求
url = 'http://127.0.0.1/api/user/gold_add'
data = {'stu_id':468,'gold':10000}
djl = {'aaa':'337ca4cc825302b3a8791ac7f9dc4bc6'}
req = requests.post(url,data,cookies=djl)#入参带有cookie,在传入参数时,指定 cookies=参数
print(req.json())
示例5:
带有header的get请求
url = 'http://127.0.0.1/api/user/all_stu'
header = {
'Referer':'http://127.0.0.1/'
}
req = requests.get(url,headers=header)#指定 headers=参数
print(req.json())
示例6:
需要上传文件的请求
url= 'http://127.0.0.1/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:
下载文件
url = 'http://up.mcyt.net/?down/46779.mp3'#要下载文件的url
req = requests.get(url)
fw = open('aaa.mp3','wb')#mp3格式也是用二进制保存,所以用wb写二进制模式,将对应文件的内容读取到
fw.write(req.content)#将读取到的内容写到一个文件中。这个文件内容就是下载的文件内容。
python基础:网络编程的更多相关文章
- python 基础网络编程2
python 基础网络编程2 前一篇讲了socketserver.py中BaseServer类, 下面介绍下TCPServer和UDPServer class TCPServer(BaseServer ...
- python 基础网络编程1
python 基础网络编程1 Source code: Lib/socketserver.py lib的主目录下有一个sockserver.py文件, 里面是python基本的网络编程模型 共有一个b ...
- python基础网络编程--转
python之网络编程 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的 ...
- python基础-网络编程part01
软件开发架构 C/S(Client / Server) 架构 概念:是一种软件系统体系结构.Client是客户端,Server是服务端.客户端需要安装专用的客户端软件. 比如:微信.QQ.王者荣耀等应 ...
- python基础-网络编程part02
TCP协议 TCP是传输控制协议,建立双向通道. 三次握手,建立连接 客户端向服务端发送建立连接的请求 服务端接收请求返回确认信息给客户端,并向客户端发送建立连接的请求 客户端接收请求返回确认信息给服 ...
- Python基础-网络编程request使用
import requests#get请求 url = "http://127.0.0.1:8000/login" data={"username":" ...
- python之网络编程
本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用 ...
- Python高级网络编程系列之第一篇
在上一篇中我们简单的说了一下Python中网络编程的基础知识(相关API就不解释了),其中还有什么细节的知识点没有进行说明,如什么是TCP/IP协议有几种状态,什么是TCP三次握手,什么是TCP四次握 ...
- python基础-函数式编程
python基础-函数式编程 高阶函数:map , reduce ,filter,sorted 匿名函数: lambda 1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层 ...
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
随机推荐
- 【Redis】Redis开篇与如何安装单机版Redis,这次我会了!!
写在前面 很早之前,就有不少小伙伴微信留言说:冰河,你能不能写一个Redis专栏啊,我最近在学习Redis,看书看不下去,学习视频又觉得视频太长了,还是看你的文章比较给力!哈哈,原来我写的文章能够让小 ...
- Visual Studio Code中设置sftp同步代码到服务器
## **前言** - 绝对的大佬才会直接在Linux下用vim写代码,我等小白只能通过IDE来了,所以将代码同步到服务器上就很重要了.使用vs code设置好sftp就可以实现这一功能. - 设置之 ...
- Linux Docker部署
Docker 安装 卸载旧版docker yum remove docker \ docker-client \ docker-client-latest \ docker-common \ dock ...
- C#LeetCode刷题之#342-4的幂(Power of Four)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4058 访问. 给定一个整数 (32 位有符号整数),请编写一个函 ...
- C#LeetCode刷题之#747-至少是其他数字两倍的最大数( Largest Number At Least Twice of Others)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3746 访问. 在一个给定的数组nums中,总是存在一个最大元素 ...
- Linux内核之 进程管理
正如上一篇我们提到过,进程是Linux系统中仅次于文件的基本抽象概念.正在运行的进程不仅仅是二进制代码,而是数据.资源.状态和虚拟的计算机组成.我们今天主要介绍进程的概念,组成,运行状态和生命周期等. ...
- 微信小程序自动化测试最佳实践(附 Python 源码)
本文为霍格沃兹测试学院测试大咖公开课<微信小程序自动化测试>图文整理精华版. 随着微信小程序的功能和生态日益完善,很多公司的产品业务形态逐渐从 App 延升到微信小程序.微信公众号等.小程 ...
- Linux系统中有趣的命令(可以玩小游戏)
Linux系统中有趣的命令(可以玩小游戏) 前言 最近,我在看一些关于Linux系统的内容,这里面的内容是真的越学越枯燥,果然学习的过程还是不容易的.记得前几个月初学Linux时,有时候就会碰到小彩蛋 ...
- gpio模拟mdc/mdio通信
本文主要是学习gpio模拟mdc/mdio通信. 运行环境是在ATMEL的sama5d35MCU,两个GPIO引脚模拟MDC/MDIO通信,读取百兆phy的寄存器的值. #include<lin ...
- git 常规操作 windows版
首先在本地建立好文件夹,然后初始化git仓库: git init 接下来在github上面克隆项目: git clone 这里写你的项目地址 然后就可以修改,删除,提交代码了 如果需要在新分支上面开 ...