一、什么是网络编程

  使用Python进行网络编程,就是通过Python打开一个网站,或者请求一个http接口。可以通过标准模块urllib实现,也可以通过更简单易用的第三方模块requests实现。

二、urllib

 # 1、没有入参的get请求
import json
from urllib import request,parse
url = 'http://www.baidu.com'
req = request.urlopen(url) # 打开一个url,发get请求
content = req.read().decode() # 获取返回结果,返回结果是bytes类型需要加decode()
fw = open('baidu.html','w',encoding='utf-8') # 创建一个html文件
fw.write(content) # 将返回的内容写入html文件 # 2、有入参的get请求
url = 'http://api.nnzhp.cn/api/user/stu_info?stu_name=小黑'
req = request.urlopen(url) # 打开一个url,发get请求
content = req.read().decode() # 获取返回结果,返回结果是bytes类型需要加decode()
res_dic = json.loads(content) # 将返回的json串转换为字典
if res_dic.get('error_code') == 0: # 根据返回的error_code判断测试是否通过
print('测试通过')
else:
print('测试不通过') # 3、post请求
url = 'http://api.nnzhp.cn/api/user/login'
data = {'username':'niuhanyang','passwd':'aA123456'} # 请求数据
data = parse.urlencode(data) # 自动拼好参数username=niuhanyang&passwd=aA123456
req = request.urlopen(url,data.encode()) # 发post请求,请求数据需要转成bytes类型
print(req.read().decode()) # 获取返回结果,返回结果是bytes类型需要加decode()

三、requests

 # 1、发get请求
import requests
url = 'http://api.nnzhp.cn/api/user/stu_info'
data = {'stu_name':'小黑'} # 请求数据
req = requests.get(url,params=data) # 发get请求
print(req.json()) # 字典
print(req.text) # string类型json串 # 2、发post请求
url = 'http://api.nnzhp.cn/api/user/login'
data = {'username':'niuhanyang','passwd':'aA123456'} # 请求数据
req = requests.post(url,data) # 发post请求
print(req.json()) # 字典
print(req.text) # string类型json串 # 3、入参是json类型的post请求
import random
phone = random.randint(10000000000,99999999999)
url = 'http://api.nnzhp.cn/api/user/add_stu'
data = {
"name":"小A",
"grade":"天蝎座",
"phone":phone,
"sex":"男",
"age":28,
"addr":"河南省济源市北海大道32号"
} # 请求数据
req = requests.post(url,json=data) # 发post请求
print(req.json()) # 字典
print(req.text) # string类型json串 # 4、post请求,添加cookie
url = 'http://api.nnzhp.cn/api/user/gold_add'
data = {'stu_id':467,'gold':''}
cookie = {'niuhanyang':'337ca4cc825302b3a8791ac7f9dc4bc6'}
req = requests.post(url,data,cookies=cookie) # 发post请求
print(req.json()) # 字典 # 5、post请求,添加header
url = 'http://api.nnzhp.cn/api/user/all_stu'
header = {'Referer':'http://api.nnzhp.cn/'}
req = requests.get(url,headers=header)
print(req.json()) # 字典 # 6、上传文件
url = 'http://api.nnzhp.cn/api/file/file_upload'
# data = {'file':open('baidu.html',encoding='utf-8')} # 文件中有中文的话要用encoding='utf-8'
data = {'file':open('QQ截图20180512164822.jpg','rb')} # 打开图片要用rb模式
req = requests.post(url,files=data)
print(req.json()) # 字典 # 7、下载图片/网页/文件
url = 'http://www.nnzhp.cn/wp-content/uploads/2018/01/soup.jpg' # 图片地址
# url = 'http://www.nnzhp.cn/archives/140' # 网页地址
# url ='http://up.mcyt.net/?down/46779.mp3' # mp3地址
req = requests.get(url) # 发送get请求
# print(req.content) #content就是返回的二进制文件内容
fw = open('s.jpg','wb') # 'wb'二进制写模式,下载图片
# fw = open('s.html','wb') # 下载网页
# fw = open('song.mp3','wb') # 下载音乐
fw.write(req.content)

Python学习之==>网络编程的更多相关文章

  1. python学习(20) 网络编程

    原文链接:http://www.limerence2017.com/2018/01/02/python20/ python 网络编程和基本的C语言编程一样,效率不是很高,如果为了封装通信库建议采用C/ ...

  2. python学习之网络编程基础

    引入场景:客户与银行关系 银行职员负责给客户提供取钱服务,客户通过账户密码跟银行职员建立合作关系.此时银行职员就可以作为服务器,当用户A取完钱后他需要等待下一个用户的接入,用户的账号密码就是建立合作关 ...

  3. python学习(九) 网络编程学习--简易网站服务器

    python `网络编程`和其他语言都是一样的,服务器这块步骤为:`1. 创建套接字``2. 绑定地址``3. 监听该描述符的所有请求``4. 有新的请求到了调用accept处理请求` Python ...

  4. python学习总结---网络编程

    网络编程 相关概念 - OSI七层模型:它从低到高分别是:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. - TCP/IP: 在OSI七层模型基础上简化抽象出来的一套网络协议簇,现在得到 ...

  5. Python学习--19 网络编程

    TCP编程 Client 创建一个基于TCP连接的Socket: # coding: utf-8 import socket # 创建一个TCP连接: s = socket.socket(socket ...

  6. Python学习day36-并发编程(2)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  7. python高级之网络编程

    python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及其源码分析 1.网络通信概念 说 ...

  8. python学习_数据处理编程实例(二)

    在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...

  9. 第六篇:python高级之网络编程

    python高级之网络编程   python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及 ...

随机推荐

  1. EF部分字段修改 自动忽略为null字段

    传入一个实体 student(){id = 1,name = "测试" age = null,sex = null} 下面 是修改的方法 public async Task Edi ...

  2. RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass

    安全研究人员在官方的 RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass.该工具的下载量高达 2800 万次,但这并不意味着下载的所有版本都存在后门,受影响的版本是 v3. ...

  3. WLAN AutoConfig服务无法开机自动启动

    又到“618”大促销,商家搞活动,买了一只小无线网卡,刚装上,一切正常.重新启动电脑后,发现无线网卡已被禁用!手工启用无线网卡也不能解决.到“计算机管理”-“服务”中将“WLAN Autoconfig ...

  4. SpringBootMybatis 关于Mybatis-generator-gui的使用|数据库的编码注意点|各项复制模板

    mysql注意点: .有关编码 create table user( id int primary key auto_increment, `name` varchar(), `password` v ...

  5. C#.net中的rank方法

    string[,] abcd = new string[2, 4];abcd[0, 0] = "a";abcd[0, 1] = "b";abcd[0, 2] = ...

  6. 利用transform skewX制作平行四边形导航菜单

    平行四边形其实是矩形的超集:它的各条边是两两平行的,但各个角则不一定都是直角.在视觉设计中,平行四边形往往可以传达出一种动感.让我们试着用 CSS 创建一个按钮状的平行四边形链接.我们的起点就是一个普 ...

  7. 集合操作符 Union / Union All / Intersect / Minus

    集合操作符 Union / UnionAll / Intersect / Minus -- 生成测试数据 create table dept_01 as select * from dept wher ...

  8. Python---webserver3

    一.v07-添加路由功能 - 路由:能够理解请求并按照请求调用相应处理函数的模块 - 理解请求内容 - 能够调用或者指定相应业务处理模块 - 算法: - 按行读取传入报文 - 假如报文能用空格分割成三 ...

  9. layui中从子窗口传递数据到父窗口,第三个子弹层的值传给第二个弹层

    最近做一个项目的需要多个弹层,每个弹层中还需要数据传递, 经过测试,以下方法三个弹层才有效,如果只是有两个弹层,请用其它方法 大概如图,看图自己应该明白 如何在在b页面选择好的值传给a页面的问题,这个 ...

  10. mssql因为手贱修改了服务配置的最大内存,造成无法启动

    mssql数据库设置内存太小,造成无法启动服务. 解决办法: 1.用命令行形式启动最精简版的mssql服务,另外再用一个新的命令行去修改配置,将内存设置为无限制.  命令行要记得用管理员身份运行比较稳 ...