【Python】Python网络编程
python内置封装了很多常见的网络协议的库,因此python成为了一个强大的网络编程工具,这里是对python的网络方面编程的一个简单描述。
urllib 和 urllib2模块
urllib 和urllib2是python标准库中最强的网络工作库。这里简单介绍下urllib模块。本次主要用urllib模块中的常用的几个模块:
urlopen
parse
urlencode
quote
unquote
_safe_quoters
unquote_plus
GET请求:
使用urllib 进行http协议的get请求,并获取接口的返回值:
from urllib.request import urlopen
url = 'http://127.0.0.1:5000/login?username=admin&password=123456'
#打开url
#urllib.request.urlopen(url)
#打开url并读取数据,返回结果是bytes类型:b'{\n "code": 200, \n "msg": "\xe6\x88\x90\xe5\x8a\x9f\xef\xbc\x81"\n}\n'
res = urlopen(url).read()
print(type(res), res)
#将bytes类型转换为字符串
print(res.decode())
POST请求:
from urllib.request import urlopen
from urllib.parse import urlencode
url = 'http://127.0.0.1:5000/register'
#请求参数,写成json类型,后面是自动转换为key-value形式
data = {
"username": "55555",
"pwd": "123456",
"confirmpwd": "123456"
}
#使用urlencode(),将请求参数(字典)里的key-value进行拼接
#拼接成username=hahaha&pwd=123456&confirmpwd=123456
#使用encode()将字符串转换为bytes
param = urlencode(data).encode()
#输出结果:b'pwd=123456&username=hahaha&confirmpwd=123456'
print(param)
#post请求,需要传入请求参数
res = urlopen(url, param).read()
res_str = res.decode()
print(type(res_str), res_str)
注:使用urllib请求post接口时,以上例子,post接口的请求参数类型是key-value形式,不适用json形式入参。
Quote模块
对请求的url中带有特殊字符时,进行转义处理。
from urllib.parse import urlencode, quote, _safe_quoters, unquote, unquote_plus
url3 = 'https://www.baidu.com/?tn=57095150_2_oem_dg:..,\\ '
#url中包含特殊字符时,将特殊字符进行转义, 输出:https%3A//www.baidu.com/%3Ftn%3D57095150_2_oem_dg%3A..%2C%5C%20
new_url = quote(url3)
print(new_url)
Unquote模块
对转义过的特殊字符进行解析操作。
from urllib.parse import urlencode, quote, _safe_quoters, unquote, unquote_plus
url4 = 'https%3A//www.baidu.com/%3Ftn%3D57095150_2_oem_dg%3A..%2C%5C%20'
#将转义后的特殊字符进行解析,解析为特殊字符
new_url = unquote(url4)
#输出结果:https://www.baidu.com/?tn=57095150_2_oem_dg:..,\
print(new_url)
#最大程度的解析
print('plus:', unquote_plus(url4))
以上就是简单介绍下urllib,对接口处理时还请参考requests模块~~~
【Python】Python网络编程的更多相关文章
- python之网络编程
本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用 ...
- Python的网络编程--思维导图
Python的网络编程--思维导图
- Python高级网络编程系列之第一篇
在上一篇中我们简单的说了一下Python中网络编程的基础知识(相关API就不解释了),其中还有什么细节的知识点没有进行说明,如什么是TCP/IP协议有几种状态,什么是TCP三次握手,什么是TCP四次握 ...
- python基础网络编程--转
python之网络编程 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的 ...
- 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 select网络编程详细介绍
刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...
- Python Socket 网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
- python多线程网络编程
背景 使用过flask框架后,我对request这个全局实例非常感兴趣.它在客户端发起请求后会保存着所有的客户端数据,例如用户上传的表单或者文件等.那么在很多客户端发起请求时,服务器是怎么去区分不同的 ...
- python中网络编程基础
一:什么是c\s架构 1.c\s即client\server 客户端\服务端架构. 客户端因特定的请求而联系服务器并发送必要的数据等待服务器的回应最后完成请求 服务端:存在的意义就是等待客户端的请求, ...
随机推荐
- 20155239《Java程序设计》实验二(面向对象程序设计)实验报告
实验内容 初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验步骤 单元测试 1.三种代码: 伪代码 ...
- 20155334 实验三 敏捷开发与XP实践
实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 完成实验.撰写实验报告,实验报告以 ...
- Spring之HandlerInterceptor拦截器
思维导图下载:https://pan.baidu.com/s/19z73Bs8MsHFAupga3Cr3Gg
- Nginx入门篇(六)之反向代理和负载均衡
一.Nginx负载均衡集群 介绍 负载均衡(Load Balance)集群提供了一种行之有效的办法,来扩展网络设备和服务器负载.带宽和吞吐量,同时加强了网络数据处理能力,提供了网络的灵活性和可用性. ...
- (转) 转换Drupal7模块到Drupal8
转载地址:http://verynull.com/2015/11/02/Converting-7-x-modules-to-8-x/ 本节主要介绍如何把drupal7的模块转化为drupal8.参考资 ...
- Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用
Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object ...
- 搞懂.NET Framework 历史版本(2017年)
最近被.NET平台各种名词.以及各种版本弄得有些疑惑,开发和部署,对于开发平台版本选择是个基本问题,因此,花了些时间,学习汇总了有关.NET版本演进的历史. .NET简介 这个平台相信我们都知道,不过 ...
- java生成pdf
介绍 本篇博客主要是为了介绍如何使用:flying-saucer+itext+freemark实现导出复杂点的pdf文件. 思路 先把pdf的内容以html形式准备好 使用freemarker将htm ...
- exe4j 使用记录(二):jar打包exe
一.环境 exe4j: 6.0.2 jre(32位): 1.8 二.打包过程 1.新建一个文件夹testExe(我的目录位置:D:\testExe)用来存放所需要打成exe的jar包.jdk或者jre ...
- VIN码/车架号的详解,车架号识别,VIN码识别,OCR车架号识别能带来什么
各位车主在车检时不知道有没有注意到一件事,就是工作人员会打开车前盖在前围钢板上拓一张条码.下面来给大家介绍一下,这张条码就是VIN号,俗称钢印号,就像我们每个人都有自己的身份证号码一样,这也是汽车界的 ...