• 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())
  • 相关阅读:
    Tensorflow 2.0 学习资源
    SpagoBI 教程 Lesson 5: Creating a dashboard with BIRT and SpagoBI
    SpagoBI 教程 Lesson 4: BIRT Reports
    SpagoBI 教程 Lesson 3: Highchart Dashboards
    SpagoBI 教程 Lesson 2: OLAP with JPIVOT
    SpagoBI 教程 Lesson 1:Introduction and Installation
    Oracle system表空间满的暂定解决方法
    运算符重载_继承_多态_模版
    成员函数返回的是对象和引用的区别(转)
    String类型_static成员_动态内存分配_拷贝构造函数_const关键字_友元函数与友元类
  • 原文地址:https://www.cnblogs.com/feng1014/p/12626742.html
Copyright © 2020-2023  润新知