python异常及网络编程

  • 为什么需要使用异常?

使用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())

 

posted @ 2020-04-03 15:27  岐岐卡卡西  阅读(230)  评论(0编辑  收藏  举报