- 为什么需要使用异常?
使用if作为错误处理机制时,无法穷举所有的异常情况,而且在处理异常时处理代码和业务代码混合在一起,严重影响程序的可读性。
使用raise语句自动引发异常。如果raise语句在try中,则会抛出RuntimeError异常。如果raise在exception语句中,则会将exception中的异常抛出。
- Python网络编程TCP,UDP
网络编程,不管是使用TCP还是UDP,都有socket程序包。
server = socket.socket(socket.AF_INET,socket.SOCK_STEWAM) #建立服务器套接字对象,第二个参数表示使用TCP server.bind(('127.0.0.1',8000)) #建立的套接字对象绑定服务器主机和端口 server.listen() #由于TCP是基于连接的协议,所以需要使用监听 sock, addr = server.accept() #服务器接受来自客户端的连接 data = sock.recv(1024) #服务器接受到客户端发送的消息 sock.send('hello client'.encode()) #服务器向客户端发送消息 server.close() #服务器关闭连接 sock.close() #连接对象关闭 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #建立客户端套接字对象 client.connect(('127.0.0.1',8000)) #建立的套接字对象连接到服务器上 client.send('hello server'.encode()) #客户端向服务器发送信息 client.recv(1024) #客户端收到服务器发送的消息 client.close() #通信结束后,关闭客户端的连接
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #建立服务器套接字对象,第二个参数表示使用UDP协议 server.bind(('127.0.0.1',8000)) #建立的服务器套接字对象绑定相应的地址和端口 data,addr=server.recvfrom(1024) #由于传输层使用UDP协议,所以不需要监听,只是在接收信息时收到客户端的地址和信息 server.sendto('hello client'.encode(),addr) #根据收到的客户端地址,再发送信息 server.close() #通信结束,关闭服务器对象 client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #建立客户端套接字对象 client.sendto('hello server'.encode(),('127.0.0.1',8000)) #客户端不需要连接到服务器,只需在发送信息时指定相应的服务器地址即可 client.recv(1024) #客户端收到服务器的信息 client.close() #通信结束关闭客户端连接
- HTTP协议
HTTP协议在应用层中使用。具有以下特点。
HTTP协议需要请求和响应来完成通信。
HTTP是一个无状态的连接,所以引入了cookie,使得服务器了解第二次连接的客户端。
HTTP协议的请求资源一般都是用URL。
HTTP请求中有各种方法,其中get,post方法使用频率最高。get方法获取资源,将各种参数加在URL之后,POST方法把请求放在请求体中,增加安全性。
HTTP为持久连接,在服务器响应的报文中,connection :keep-alive这个属性使得下一次请求可以立刻连接,节约网络资源。
import urllib.request import urllib.parse def test_get(): user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36' headers = { 'User-Agent':user_agent } req = urllib.request.Request('http://www.woniuxy.com/',headers=headers) resp = urllib.request.urlopen(req) print(resp.read().decode()) def test_post(): user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36' headers = { 'User-Agent':user_agent } data = { 'user.tel': '15798769876', 'user.password': '123456', 'checkcode': '1111' } data = urllib.parse.urlencode(data).encode() req = urllib.request.Request('http://www.woniuxy.com/login/userLogin',headers=headers,data=data) resp = urllib.request.urlopen(req) print(resp.read().decode())