一、什么是网络编程

  使用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. Nginx 故障实例

    linux vi 操作提示 Found a swap file by the name "/usr/local/nginx/conf/.nginx.conf.swp" 解决方法: ...

  2. python接口测试—mysql数据库操作

    python操作mysql数据库 1.安装pymysql库 在python中安装pymysql第三方库,通过pip install pymysql 命令进行安装. 2.python操作mysql数据库 ...

  3. CSS布局方式

    1.内边距 padding <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  4. python 重学

    -------------------------

  5. Caffe学习使用__运行caffe自带的两个简单例子

    为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载.但在caffe根目录下的data文件夹里,作者已经为我们编写好了下载数据的脚本文件,我们只需要联网,运行这些脚本文件就行了. 注意: ...

  6. Okhttp拦截器统一异常处理并多次读取response.body().string()

    参考:https://blog.csdn.net/a624806998/article/details/73863606 引言: 写这篇文章,因为在自己编写实现Http日志拦截器的时候,在拦截器中使用 ...

  7. 上传图片,正在加载,loading

    https://blog.csdn.net/yansong_8686/article/details/50361573

  8. Linux安装redis,启动配置不生效(指定启动加载配置文件)

    一.今天有个同学问我,为什么明明安装了redis,修改了配置,启动的时候,配置还是不生效.如下图是安装后的redis文件图. 二.想加载上图中的redis.conf,进入到src中寻找到启动文件red ...

  9. java常用类与包装类--常用类正则表达式 String正则方法+Matcher+Pattern

    0.java中的正则 java 中的正则总共涉及三个类(或者说1个String类和一个regex包) java.lang.String java.util. Matcher java.util.Pat ...

  10. 【UOJ#77】A+B Problem

    传送门 题目描述 略 Sol 看到选择黑白收益不同,然后还可能有代价. 我们想到用网络流解决,并且这应该是用总可能收益-最小割得到答案. 考虑初步建图,发现那个限制可以直接 \(n^2\) 解决. 我 ...