一、什么是网络编程

  使用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. 2019-11-29-git-需要知道的1000个问题

    title author date CreateTime categories git 需要知道的1000个问题 lindexi 2019-11-29 8:36:7 +0800 2018-2-13 1 ...

  2. pycharm 激激活码

    pycharm 激活码 [20191224亲测可用] http://lookdiv.com/neet/youd/codes.html    

  3. (转) weblogic 12c忘记密码

    weblogic安装后,很久不用,忘记访问控制台的用户名或者密码,可通过以下步骤来重置用户名密码. 说明:%DOMAIN_HOME%:指WebLogic Server 域(Domain)目录 我的是: ...

  4. 由n个已按1,2,3,.....,n编号的人围成一圈,从编号为1的人开始按1,2,3顺序循环报数,凡报到3者出圈,最后留一个人,问其编号是多少

    /************************************************************************* > File Name: only_one. ...

  5. ubuntu 安装nginx redis dotnet

    1 安装nginx sudo apt-get update sudo apt-get install nginx 配置文件 /etc/nginx/nginx.conf 2 安装redis sudo a ...

  6. java 集合之ArrayList、Vector、LinkedList、CopyOnWriteArrayList

    ArrayList 线程不安全. 底层Object[]数组实现,用transient关键字修饰,防止序列化,然后重写了readObject和writeObject方法,为了提高传输效率. 插入时会判断 ...

  7. MySQL事务以及特征

    1.什么是事务? 在现实生活中,我们往往会进行转账操作.转账可以分为两部分完成,转入和转出,只要两部分都完成了才算转账完成.在数据库中,这个过程是由两条sql语句来完成的, 如果任意一方的语句没有执行 ...

  8. hdu 3376 : Matrix Again【MCMF】

    题目链接 题意:给定一个n*n的矩阵,找一条路,从左上角到右下角再到左上角,每个点最多经过一次,求路径上的点的权值的最大和. 将矩阵中每个点拆点,点容量为1,费用为点权值的相反数.每个点向自己右侧和下 ...

  9. C++ 值传递、指针传递、引用传递

    1.值传递 (1)形参是实参的拷贝(这句话说明形参和实参是两个实体),改变形参的值并不会影响外部实参的值. (2)从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传 ...

  10. 南京网络赛 E K Sum

    K Sum 终于过了这玩意啊啊啊==== 莫比乌斯反演,杜教筛,各种分块,积性函数怎么线性递推还很迷==,得继续研究研究 #include<bits/stdc++.h> using nam ...