2018-10-24day19网络基础和网络编程基础

  • 注意:控制次数后面加?表示次数尽可能可能少匹配(非贪婪匹配)

  • 正则转意:想让特殊功能的符号表示它本身,就可以通过\转移意,除了\和—,其他的符号放在[]中都表示符号本身

  • 匹配相关:match、fullmatch 返回值是匹配对象

span(), group(), string(),start(),end()

查找相关

  • search(正则表达式,字符串) 返回一个对象和None,
  • 去字符串中查找满足正则表达式的子串,如果有返回第一个满足条件的字符串匹配对象
  • findall() 获取所有满足正则表达式条件的子串,返回一个元素是字符串的列表。如果正则中有分组,自取分组中的内容
  • finditer() 获取所有满足正则表达式的子串,返回一个迭代器,迭代器中的内容是匹配对象

切割相关

  • split() 按满足正则条件的子串对字符串进行切割
  • sub(正则,替换值,字符串)
  • compile()将正则表达式转换成正则表达式对象

一、网络基础

1、osi参考模型(7层):国际化标准组织分析计算机通信,把计算机通信进行的规范和标准化分成7层
  • 应用层
  • 表示层
  • 会话层:建立回话、木马(盗取数据)
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层
2、tcp/ip协议
  • 数据传输准备
  • 传输层:消息或数据段 :tcp头和数据
  • 网络层:ip头+ tcp头和数据+FCS
  • 数据链路层:MAC+ ip头+ tcp头和数据+FCS
  • 物理层:转换成二进制(bit)
3、tcp可靠传输
  • 需要传输的文件需要分段传输
  • 需要建立连接
4、udp不可靠传输
  • 一个数据包就能完成数据通信
  • 不需要建立回话
二、socket套接字
1、什么是套接字
  • 实现网络通信的两端就是套接字,分为服务器对应的套接字和客户端对应的套接字
2、socket编程
  • 就是用程序实现服务器和客户端
  • python提供了一个socket标准库来实现socket编程
服务器程序
import socket
# i.创建服务器对应的套接字对象
# socket(faimliy,type)
# faimliy: 设置ip类型(AF_INET默认为Ipv4,AF_INET6(ipv6))
# type:# 设置传输类型(SOCK_STREAM默认值(TCP协议可靠传输),SOCK_STREAM=2(UDP不可靠传输))

server = socket.socket()  # 创建一个基于ipv4的可靠传输的服务器套接字

# 2.绑带ip地址和端口
# bind((ip, 端口)) :参数时元祖(ip,端口)
# ip:服务器的地址(字符串)
# 端口:不同的端口用来区分不同的服务(端口就是应用程序的唯一标识),取值范围(0-65535),注意0-1024属于著名端口
server.bind(('10.7.156.141', 8080))

# 3、监听请求
# listen(个数) : 通过数字设置服务一次可以处理多少个请求个数
server.listen(512)
print('开始监听')

# 4、让服务器一直处于循环状态

while True:
    # 5、接受请求
    # accept() 接受请求执行到accpet程序会停下来(阻塞线程),如果有客户端在请求这个服务器时才会往下执行。返回会哈和客户端的地址
    conversion, addr = server.accept()
    print(addr)
    # 6、服务器给客户端发送数据
    # send(data) 发送数据
    # data:需要发送的数据,要求是二进制数据(bytes)
    # str转二进制bytes
    # 方法一:
    # 语法:bytes(内容)
    # 方法二:
    # 字符串.encode(编码方式)
    message = input('>>>>')
    message_data = bytes(message, encoding='utf-8') # 类型转换
    conversion.send(message_data)

    # 7、接受客户端发送的消息
    # recv(字节数) 接受客户端发送的数据,参数是用来设置一次能就收的最大字节数
    # 注意:recv方法也会阻塞线程,也就是说程序运行到这里会停下来,等到对方发送消息为止
    # 返回接收到的数据(接收到二进制数据)
    # 如果接收到字符串(需要将二进制转换成字符串)
    # str(二进制, encoding='utf-8')
    # 二进制.decode(编码方式)
    data = conversion.recv(1024)
    # re_message = str(data, encoding='utf-8')
    re_message = data.decode('utf-8')
    print(re_message)

三、socket客户端

  • 端口号:同一时间同一个端口只能绑定一个服务
# 客户端
import socket
# 1、创建套接字对象
client = socket.socket()

# 2.连接服务器
# connect((地址,端口))
client.connect(('10.7.156.97', 8080))

while True:
    # 4、给服务器发送消息
    message =  input('>>>')
    client.send(message.encode('utf-8'))

    # 3、接受服务器返回的服务器
    re_data = client.recv(1024)
    print('他说:', re_data.decode('utf-8'))

    if re_data == '拜拜':
        break
# 服务器
import socket

# 1、创建服务器
server = socket.socket()

server.bind(('10.7.156.141', 8080))

server.listen(100)

while True:
    # 接受请求
    conversation, addr = server.accept()
    print(conversation)
    # 用于保持回话
    while True:
        message_re = conversation.recv(1024).decode('utf-8')
        print(('他说(%s):%s'%(addr[0][-2:], message_re)))

        # 发送消息
        message = input('>>>>')
        conversation.send(message.encode('utf-8'))

        if message == '拜拜':
            break

五、HTTP和HTTPS

  • 1、URL:统一资源定位符,就是互联网上每个资源的唯一标识
  • 2、URL:协议://主机地址/路径
    协议:不同的协议,代表不同的资源查找方式、资源传输方式
  • 存放资源的主机(服务器)的ip地址(域名)
  • 路径:资源在主句中的相对路径
2、常见协议
  • HTTP:超文本传输协议,访问远程的网络资源,开发中最常见的协议
  • file:访问本地计算机资源
  • mailto:访问电子邮件地址
  • FTP:访问的是共享主机的文件资源
3、HTTP协议
  • 超文本传输协议
  • 作用:让客户端和服务器端能有效进行通讯,同时规定了客户端和服务器之间的数据传输格式
4、HTTP特点
  • 简单快速
  • 灵活:允许传输各种各样的数据
  • 在0.9-1.0使用非持续连接:服务器对客户端的请求做出响应后就会自动断开连接
5、HTTP通讯过程
  • 请求:客户端 到 服务器端
  • 响应:服务器端 到 客户端

6、常见的状态码

状态码 含义
200 请求成功
400 客户端请求语法错误,服务器不发解析
404 NotFound 服务器无法根据客户端的请求找到资源
500 服务器内部错误,无法完成请求

六、学习request

  • python中没有一个标准库来支持网络请求,但目前有一个第三方库支持HTTP请求
import requests
# get(url, params)
# url:请求地址
# paams: 客户端给服务器发送数据(字典){参数名:值}
url = 'https://www.apiopen.top/satinApi'
# https://www.apiopen.top/satinApi?type=1&page=1
response = requests.get(url, {'type':1, 'page':1})
# 1.获取响应头
# print(response.headers)

# 2、获取响应体
# 方式1:(二进制形式的响应体)
data_bytes = response.content
# print(data_bytes)

# 方式2:(字符串形式)
data_text = response.text
print(data_text)

# 方式3:(json格式对应的python数据)
data_json = response.json()
# print(data_json)

你可能感兴趣的:(2018-10-24day19网络基础和网络编程基础)