美文网首页
net/textproto

net/textproto

作者: 酷走天涯 | 来源:发表于2018-12-25 09:27 被阅读13次

    textproto实现了对基于文本的请求/回复协议的一般性支持,包括HTTP、NNTP和SMTP

    主要功能如下

    • 1.格式化MIME头的键
    • 2.去掉ascii编码字符切片的空白
    • 3.MIMEHeader 功能介绍
    • 4.创建网络连接
    • 5.写入数据
    • 6.读取数据

    1.格式化MIME头的键

    标准化 MIME 头: Accept-Encoding 字符连接的单词首字母大写 ,其余小写

    func CanonicalMIMEHeaderKey(s string) string

    textproto.CanonicalMIMEHeaderKey("content-type") // Content-Type
    

    2.去掉ascii编码字符切片的空白

    下面我们把一个文件的内容读取到data中

        var data  = []byte("  ddd  ")
        fmt.Println(len(textproto.TrimBytes(data))) // 3
    

    下面这个方法剔除字符串空白

    func TrimString(s string) string
    

    3.MIMEHeader 功能介绍

      mimeHeader :=   make(textproto.MIMEHeader)
      mimeHeader.Set("Content-Type","text/plain")// 系统会自动转换为mime key标准格式
      fmt.Println(mimeHeader)
      mimeHeader.Del("content-type")
      mimeHeader.Add("Content-Type","text/html")
      fmt.Println(mimeHeader)
      fmt.Println(mimeHeader.Get("content-type")) // 系统会自动转换为mime key标准格式
    
    

    map[Content-Type:[text/plain]]
    map[Content-Type:[text/html]]
    text/html


    4.创建网络连接

    func Dial(network, addr string) (*Conn, error)

    package main
    
    import (
        "net/textproto"
        "fmt"
    )
    
    func main() {
    
        conn,error := textproto.Dial("tcp","smtp.qq.com:25")
        if error != nil {
            fmt.Println(error)
        }
        fmt.Println(conn)
        fmt.Println(conn.Reader)
        fmt.Println(conn.Writer)
        data,error := conn.Reader.ReadLine()
        if error != nil {
            fmt.Println(error)
        }
        fmt.Println(data)
    }
    
    image.png

    我们与 smtp.qq.com:25 建立了连接,并且读取到了邮件服务器返回给我们的数据 220 smtp.qq.com Esmtp QQ Mail Server

    5.写入数据

    package main
    
    import (
        "net/textproto"
        "fmt"
    )
    
    func main() {
    
        conn,error := textproto.Dial("tcp","smtp.qq.com:25")
        if error != nil {
            fmt.Println(error)
        }
        data,error := conn.Reader.ReadLine()
        if error != nil {
            fmt.Println(error)
        }
        fmt.Println(data)
        // 向服务器写入了一个HELO命令
        conn.Writer.PrintfLine("HELO %s","xujie")
        data,error = conn.Reader.ReadLine()
        if error != nil {
            fmt.Println(error)
        }
        //
        fmt.Println(data)
    }
    

    220 smtp.qq.com Esmtp QQ Mail Server
    250 smtp.qq.com

    func (w *Writer) DotWriter() io.WriteCloser

    DotWriter方法返回一个io.WriteCloser,用于将点编码文本写入w。返回的接口会在必要时添加转义点,将行尾的\n替换为\r\n,并在关闭时添加最后的.\r\n行。调用者必须在下一次调用w的方法前关闭该接口

    返回的 io.WriteCloser 有一个close方法,调用close可以关闭数据传输

    6.读取数据

    //ReadDotLines方法读取一个点编码文本块并返回一个包含解码后各行的切片,各行最后的\r\n或\n去掉
    func (r *Reader) ReadDotLines() ([]string, error) 
    //ReadLine方法从r读取单行,去掉最后的\r\n或\n。
    func (r *Reader) ReadLine() (string, error)
    //ReadLineBytes类似ReadLine但返回[]byte切片。
    func (r *Reader) ReadLineBytes() ([]byte, error)
    //方法读取回复的状态码行,格式如下:
    func (r *Reader) ReadCodeLine(expectCode int) (code int, message string, err error)
    

    相关文章

      网友评论

          本文标题:net/textproto

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