美文网首页
day18 - http/TCP/IP(总结)

day18 - http/TCP/IP(总结)

作者: 未醒的梦_19b0 | 来源:发表于2018-11-28 19:14 被阅读0次

    1.recode

    1.1.正则符号
    a.匹配字符
    . \w \s \d \W \S \D [字符集][^字符集]
    b.边界检测
    \b ^ $
    c.匹配次数
    \+ \* ? {} 贪婪?
    d.分之、分组
    |
    () - 分组,捕获,重复
    e.转义符号
    特殊符号前加\
    2.2.re模块
    fullmatch() - 检测一个字符串是否是ip/检测账号密码是否符合要求/检测输入的内容是否是手机号,邮箱
    match() - 检测字符串开头是否满足要求 - 匹配对象
    search() - 判断字符串中是否存在满足要求的子串 - 匹配对象
    split() - 字符串切割
    sub() - 字符串替换
    findall() - 获取子串
    finditer() - 获取所有的匹配结果,返回值是迭代器

    2.socket编程

    socket又叫套接字,指的就是实现通信过程的两个端。等待请求的一端叫服务器套接字,发送请求的一端叫客户端套接字
    python中提供了socket模块来支持socker编程。
    2.1.服务器套接字
    a.创建套接字对象
    socket(family,type)
    family - 设置IP类型 AF_INET(默认值) - IPv4, AF_INET6 - IPv6
    type - 设置传输类型 SOCK_STREAM - TCP SOCK_DGRAM - UDP

    创建一个基于IPV4和TCP的套接字对象
    server = socket.socket()
    

    b.绑定IP地址和端口
    bind((IP,端口号))
    IP地址 - 服务器对应的计算机的IP地址,字符串
    端口号 - 用来区分计算机上不同的服务;是一个数字,范围是0-65535.但是其中1024及以下的是著名端口,
    用来表示一些特殊的服务,一般不要用
    同一个时间一个端口只能对应一个服务

    server.bind(('10.7.187.105', 8100))
    

    c.开始监听
    listen(最大监听数)
    最大监听数 - 用来设置当前服务器一次可以处理多少个请求

    server.listen(100)
    print('开始监听')
    

    d.让服务器一直处于启动状态

    while True:
        # 接收客户端发送的请求,返回请求地址和会话对象;注意:程序代码会阻塞线程(程序运行到这儿会停下来
        # ,直到有客户端给当前服务器发送请求为止)
        conversation, addr = server.accept()
        print('接受到请求:', addr)
        # 接收消息(客户端发送给服务器的消息)
        """
        recv(缓存大小) - 获取客户端个服务器发送的数据,返回值是二进制
        缓存大小 - 决定一次可以接收的数据最大字节数
        这儿也会阻塞线程
        """
        re_data = conversation.recv(1024)
        print(re_data.decode('utf-8'))
        # 发送数据(服务器给客户端发送数据)
        """
        send(数据) - 将指定的数据发送给客户端
        数据 - 要求是二进制
        字符串转二进制
        a.bytes(字符串,'utf-8')
        b.字符串.encode('utf-8')
        二进制转字符串
        a.str(二进制数据,'utf-8')
        b.二进制.decode('utf-8')
        """
        message = 'HTTP/1.1 200 OK 你好!'
        conversation.send(message.encode('utf-8'))
        # 关闭连接
        conversation.close()
    

    2.2客户端套接字
    a.创建套接字对象

    client = socket.socket()
    

    b.连接服务器
    connect((IP,端口))

    client.connect(('10.7.187.105', 8100))
    

    c.发送消息

    message= input('输入:')
    client.send(message.encode('utf-8')
    

    d.接收消息

    re_data = client.recv(1024)
    print(re_data.decode('utf-8'))
    

    3.请求网络数据

    python中去做http请求,需要使用一个第三方库,requests
    3.1.向服务器发送get请求
    a.手动拼接url

    url = 'https://www.apiopen.top/satinApi?type=1&page=1'
    response = requests.get(url)
    print(response)
    

    b.自动拼接url

    url = 'https://www.apiopen.top/satinApi'
    response = requests.get(url, {'type': 1, 'page': 1})
    print(response)
    

    3.2.获取结果
    a.获取响应头

    header = response.headers
    print(header)
    

    b.获取响应体
    1)获取二进制格式的响应体

    content = response.content
    print(content)
    

    2)获取json格式响应体 - 自动将json数据转换成python

    content = response.json()
    print(content)
    

    3)获取字符串格式的响应体

    content = response.text
    print(content)
    # 应用;下载一个网络图片
    url = 'https://timgsa.baidu.com/timg?image&quality=80&size=b10000_' \
          '10000&sec=1543395098&di=2a5bbaa5600097b050ba69a688672de9&src=http' \
          '://p0.qhimgs4.com/t0112e7ebfdef7f923d.jpg'
    response = requests.get(url)
    image_data = response.content
    with open('王也.jpg', 'wb') as f:
        f.write(image_data)
    

    4.附加知识(网络基础/HTTP)

    一、HTTP

    1.1.什么是URL
    URL又叫统一资源定位符
    URL的基本格式 = 协议://主机地址/路径
    协议:不同的协议,代表着不同的资源查找方式、资源传输方式(http,file,ftp,mailto)
    主机地址:存放资源的主机(服务器)的IP地址(域名)
    路径:资源在主机(服务器)中的具体位置
    1.2.URL中常见的协议
    http:超文本传输协议,访问的是远程的网络资源,格式是http://
    file:访问的是本地计算机上的资源,格式是file://(不用加主机地址)
    mailto:访问的是电子邮件地址,格式是mailto:
    ftp:访问的是共享主机的文件资源,格式是ftp://
    1.3.http的通信过程
    完整的http通信可以分为2大步骤:
    1)请求:客户端向服务器索要数据
    HTTP协议规定:1个完整的由客户端发给服务器的HTTP请求中包含以下内容:
    a.请求头:包含了对客户端的环境描述、客户端请求信息等
    GET /minion.png HTTP/1.1 // 包含了请求方法、请求资源路径、HTTP协议版本
    Host: 120.25.226.186:32812 // 客户端想访问的服务器主机地址
    User-Agent: Mozilla/5.0 // 客户端的类型,客户端的软件环境
    Accept: text/html, / // 客户端所能接收的数据类型
    Accept-Language: zh-cn // 客户端的语言环境
    Accept-Encoding: gzip // 客户端支持的数据压缩格式
    b.请求体:客户端发给服务器的具体数据,比如文件数据(POST请求才会有)
    2)响应:服务器返回客户端相应的数据
    客户端向服务器发送请求,服务器应当做出响应,即返回数据给客户端
    HTTP协议规定:1个完整的HTTP响应中包含以下内容:
    a.响应头:包含了对服务器的描述、对返回数据的描述
    HTTP/1.1 200 OK // 包含了HTTP协议版本、状态码、状态英文名称
    Server: Apache-Coyote/1.1 // 服务器的类型
    Content-Type: image/jpeg // 返回数据的类型
    Content-Length: 56811 // 返回数据的长度
    Date: Mon, 23 Jun 2014 12:54:52 GMT // 响应的时间
    b.响应体:服务器返回给客户端的具体数据,比如文件数据
    1.4.常见的状态码

    HTTP常见状态码
    1.5.发送HTTP请求的方法
    在HTTP/1.1协议中,定义了8种发送http请求的方法
    GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH
    根据HTTP协议的设计初衷,不同的方法对资源有不同的操作方式
    PUT :增
    DELETE :删
    POST:改
    GET:查
    最常用的是GET和POST(实际上GET和POST都能办到增删改查)
    要想使用GET和POST请求跟服务器进行交互,得先了解一个概念
    参数
    就是传递给服务器的具体数据,比如登录时的帐号、密码
    1.6.GET和POST对比
    GET和POST的主要区别表现在数据传递上
    GET
    在请求URL后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开,比如
    http://www.test.com/login?username=123&pwd=234&type=JSON
    由于浏览器和服务器对URL长度有限制,因此在URL后面附带的参数是有限制的,通常不能超过1KB
    POST
    发给服务器的参数全部放在请求体中
    理论上,POST传递的数据量没有限制(具体还得看服务器的处理能力)

    二、网络基础

    2.1.OSI参考模型
    OSI模型是国际标准化组织分析计算机通信,把计算机通信进行的规范
    和标准化分成了7层:
    应用层:所有能产生网络流量的程序(QQ,浏览器、有道)
    表示层:数据传输前的压缩、加密、确定编码方式等操作
    会话层:查看木马(netstat -nb)(只要需要网络请求,就必定会建立会话)
    传输层:可靠传输、不可靠传输、流量控制
    网络层:负责选择最佳路径、规划IP地址

    数据链路层:帧的开始和结尾、透明传输、查错校验
    物理层:接口标准、电器标准

    OSI参考模型
    数据封装过程
    数据解封过程
    TCP/IP协议通信过程
    2.2.传输层的两个协议
    在TCP/IP协议栈,传输层有两个协议:TCP和UDP
    TCP协议(Transmission Control Protocol,传输控制协议)
    1. 需要传输的文件分段传输
    2. 建立会话
    3. 可靠传输
    4. 流量控制
      UDP协议(User Data Protocol,用户数据报协议)
    5. 一个数据包就能完成数据通信
    6. 不需要建立会话
    7. 不可靠传输
    8. 不需要流量控制

    TCP的可靠传输:


    TCP的可靠传输

    相关文章

      网友评论

          本文标题:day18 - http/TCP/IP(总结)

          本文链接:https://www.haomeiwen.com/subject/andzqqtx.html