directory search
archive archive/tar archive/zip bufio bufio(缓存) builtin builtin(内置包) bytes bytes(包字节) compress compress/bzip2(压缩/bzip2) compress/flate(压缩/flate) compress/gzip(压缩/gzip) compress/lzw(压缩/lzw) compress/zlib(压缩/zlib) container container/heap(容器数据结构heap) container/list(容器数据结构list) container/ring(容器数据结构ring) context context(上下文) crypto crypto(加密) crypto/aes(加密/aes) crypto/cipher(加密/cipher) crypto/des(加密/des) crypto/dsa(加密/dsa) crypto/ecdsa(加密/ecdsa) crypto/elliptic(加密/elliptic) crypto/hmac(加密/hmac) crypto/md5(加密/md5) crypto/rand(加密/rand) crypto/rc4(加密/rc4) crypto/rsa(加密/rsa) crypto/sha1(加密/sha1) crypto/sha256(加密/sha256) crypto/sha512(加密/sha512) crypto/subtle(加密/subtle) crypto/tls(加密/tls) crypto/x509(加密/x509) crypto/x509/pkix(加密/x509/pkix) database database/sql(数据库/sql) database/sql/driver(数据库/sql/driver) debug debug/dwarf(调试/dwarf) debug/elf(调试/elf) debug/gosym(调试/gosym) debug/macho(调试/macho) debug/pe(调试/pe) debug/plan9obj(调试/plan9obj) encoding encoding(编码) encoding/ascii85(编码/ascii85) encoding/asn1(编码/asn1) encoding/base32(编码/base32) encoding/base64(编码/base64) encoding/binary(编码/binary) encoding/csv(编码/csv) encoding/gob(编码/gob) encoding/hex(编码/hex) encoding/json(编码/json) encoding/pem(编码/pem) encoding/xml(编码/xml) errors errors(错误) expvar expvar flag flag(命令行参数解析flag包) fmt fmt go go/ast(抽象语法树) go/build go/constant(常量) go/doc(文档) go/format(格式) go/importer go/parser go/printer go/scanner(扫描仪) go/token(令牌) go/types(类型) hash hash(散列) hash/adler32 hash/crc32 hash/crc64 hash/fnv html html html/template(模板) image image(图像) image/color(颜色) image/color/palette(调色板) image/draw(绘图) image/gif image/jpeg image/png index index/suffixarray io io io/ioutil log log log/syslog(日志系统) math math math/big math/big math/bits math/bits math/cmplx math/cmplx math/rand math/rand mime mime mime/multipart(多部分) mime/quotedprintable net net net/http net/http net/http/cgi net/http/cookiejar net/http/fcgi net/http/httptest net/http/httptrace net/http/httputil net/http/internal net/http/pprof net/mail net/mail net/rpc net/rpc net/rpc/jsonrpc net/smtp net/smtp net/textproto net/textproto net/url net/url os os os/exec os/signal os/user path path path/filepath(文件路径) plugin plugin(插件) reflect reflect(反射) regexp regexp(正则表达式) regexp/syntax runtime runtime(运行时) runtime/debug(调试) runtime/internal/sys runtime/pprof runtime/race(竞争) runtime/trace(执行追踪器) sort sort(排序算法) strconv strconv(转换) strings strings(字符串) sync sync(同步) sync/atomic(原子操作) syscall syscall(系统调用) testing testing(测试) testing/iotest testing/quick text text/scanner(扫描文本) text/tabwriter text/template(定义模板) text/template/parse time time(时间戳) unicode unicode unicode/utf16 unicode/utf8 unsafe unsafe
characters

  • import "net/textproto"

  • 概况

  • 索引

概况

Package textproto 以 HTTP,NNTP 和 SMTP 的风格实现对基于文本的请求/响应协议的通用支持。

该软件包提供:

Error,表示来自服务器的数字错误响应。

Pipeline,管理客户端中的流水线请求和响应。

Reader,读取数字响应代码行,键:值标题,用连续行上的前导空格包裹的行,以及单独以行结束的整个文本块。

Writer,编写点编码的文本块。

Conn,一种便于阅读器,书写器和管道的包装,可用于单一网络连接。

索引

  • func CanonicalMIMEHeaderKey(s string) string

  • func TrimBytes(b []byte) []byte

  • func TrimString(s string) string

  • type Conn

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

  • func NewConn(conn io.ReadWriteCloser) *Conn

  • func (c *Conn) Close() error

  • func (c *Conn) Cmd(format string, args ...interface{}) (id uint, err error)

  • type Error

  • func (e *Error) Error() string

  • type MIMEHeader

  • func (h MIMEHeader) Add(key, value string)

  • func (h MIMEHeader) Del(key string)

  • func (h MIMEHeader) Get(key string) string

  • func (h MIMEHeader) Set(key, value string)

  • type Pipeline

  • func (p *Pipeline) EndRequest(id uint)

  • func (p *Pipeline) EndResponse(id uint)

  • func (p *Pipeline) Next() uint

  • func (p *Pipeline) StartRequest(id uint)

  • func (p *Pipeline) StartResponse(id uint)

  • type ProtocolError

  • func (p ProtocolError) Error() string

  • type Reader

  • func NewReader(r *bufio.Reader) *Reader

  • func (r *Reader) DotReader() io.Reader

  • func (r *Reader) ReadCodeLine(expectCode int) (code int, message string, err error)

  • func (r *Reader) ReadContinuedLine() (string, error)

  • func (r *Reader) ReadContinuedLineBytes() ([]byte, error)

  • func (r *Reader) ReadDotBytes() ([]byte, error)

  • func (r *Reader) ReadDotLines() ([]string, error)

  • func (r *Reader) ReadLine() (string, error)

  • func (r *Reader) ReadLineBytes() ([]byte, error)

  • func (r *Reader) ReadMIMEHeader() (MIMEHeader, error)

  • func (r *Reader) ReadResponse(expectCode int) (code int, message string, err error)

  • type Writer

  • func NewWriter(w *bufio.Writer) *Writer

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

  • func (w *Writer) PrintfLine(format string, args ...interface{}) error

包文件

header.go pipeline.go reader.go textproto.go writer.go

func CanonicalMIMEHeaderKey

func CanonicalMIMEHeaderKey(s string) string

CanonicalMIMEHeaderKey 返回 MIME 标头密钥的规范格式。规范化将第一个字母和连字符后面的任何字母转换为大写; 其余的都转换为小写。例如,“accept-encoding”的规范密钥是“Accept-Encoding”。假设 MIME 标题密钥仅为 ASCII 。如果 s 包含空格或无效标题字段字节,则不做任何修改就返回。

func TrimBytes

func TrimBytes(b []byte) []byte

TrimBytes 返回 b,没有前导和尾随 ASCII 空间。

func TrimString

func TrimString(s string) string

TrimString 返回 s,没有前导和尾随的 ASCII 空间。

type Conn

Conn 表示文本网络协议连接。它由读写器组成,用于管理 I/O 和管道,以便对连接上的并发请求进行排序。这些嵌入式类型带有它们的方法; 有关详细信息,请参阅这些类型的文档。

type Conn struct {
        Reader
        Writer
        Pipeline        // contains filtered or unexported fields}

func Dial

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

Dial 使用 net.Dial 连接到给定网络上的给定地址,然后为连接返回一个新的 Conn 。

func NewConn

func NewConn(conn io.ReadWriteCloser) *Conn

NewConn 使用 conn 返回一个新的 Conn 用于 I/O 。

func (*Conn) Close

func (c *Conn) Close() error

Close 关闭连接。

func (*Conn) Cmd

func (c *Conn) Cmd(format string, args ...interface{}) (id uint, err error)

Cmd 是一个方便的方法,它在流水线中等待轮流后发送命令。命令文本是使用 args 格式化格式并追加 \r \n 的结果。Cmd 返回命令的 ID,用于 StartResponse 和 EndResponse 。

例如,客户端可能运行 HELP 命令,该命令使用以下命令返回点体:

id, err := c.Cmd("HELP")if err != nil {return nil, err}c.StartResponse(id)defer c.EndResponse(id)if _, _, err = c.ReadCodeLine(110); err != nil {return nil, err}text, err := c.ReadDotBytes()if err != nil {return nil, err}return c.ReadCodeLine(250)

type Error

错误表示来自服务器的数字错误响应。

type Error struct {
        Code int
        Msg  string}

func (*Error) Error

func (e *Error) Error() string

type MIMEHeader

MIMEHeader 表示将值映射到多组值的 MIME 样式标题。

type MIMEHeader map[string][]string

func (MIMEHeader) Add

func (h MIMEHeader) Add(key, value string)

添加将关键字值对添加到标题。它附加到与键相关的任何现有值。

func (MIMEHeader) Del

func (h MIMEHeader) Del(key string)

Del 删除与键关联的值。

func (MIMEHeader) Get

func (h MIMEHeader) Get(key string) string

获取与给定键相关的第一个值。它不区分大小写; CanonicalMIMEHeaderKey 用于规范提供的密钥。如果没有与该键关联的值,Get 返回“”。要访问密钥的多个值或使用非规范密钥,请直接访问地图。

func (MIMEHeader) Set

func (h MIMEHeader) Set(key, value string)

Set 将与键关联的标题条目设置为单个元素值。它取代了任何与键相关的现有值。

type Pipeline

管道管理流水线顺序请求/响应序列。

要使用管道 p 来管理连接上的多个客户端,每个客户端应运行:

id := p.Next()// take a numberp.StartRequest(id)// wait for turn to send request«send request»
p.EndRequest(id)// notify Pipeline that request is sentp.StartResponse(id)// wait for turn to read response«read response»
p.EndResponse(id)// notify Pipeline that response is read

流水线服务器可以使用相同的调用来确保并行计算的响应以正确的顺序写入。

type Pipeline struct {        // contains filtered or unexported fields}

func (*Pipeline) EndRequest

func (p *Pipeline) EndRequest(id uint)

EndRequest 通知 p 具有给定 ID 的请求已发送(或者,如果这是一个服务器,则接收)。

func (*Pipeline) EndResponse

func (p *Pipeline) EndResponse(id uint)

EndResponse 通知 p 已收到给定 ID 的响应(或者,如果是服务器,则发送)。

func (*Pipeline) Next

func (p *Pipeline) Next() uint

接下来返回请求/响应对的下一个 ID 。

func (*Pipeline) StartRequest

func (p *Pipeline) StartRequest(id uint)

StartRequest 阻塞,直到发送(或者,如果这是服务器,接收)具有给定 ID 的请求。

func (*Pipeline) StartResponse

func (p *Pipeline) StartResponse(id uint)

StartResponse 块直到需要接收(或者,如果这是服务器,发送)具有给定 ID 的请求。

type ProtocolError

ProtocolError 描述协议违规,例如无效响应或挂断连接。

type ProtocolError string

func (ProtocolError) Error

func (p ProtocolError) Error() string

type Reader

Reader 实现便捷方法来读取来自文本协议网络连接的请求或响应。

type Reader struct {
        R *bufio.Reader        // contains filtered or unexported fields}

func NewReader

func NewReader(r *bufio.Reader) *Reader

NewReader 从 r 返回一个新的 Reader 读数。

为了避免拒绝服务攻击,提供的 bufio.Reader 应该从 io.LimitReader 或类似的 Reader 中读取以限制响应的大小。

func (*Reader) DotReader

func (r *Reader) DotReader() io.Reader

DotReader 返回一个新的 Reader,它使用从 r 读取的点编码块的解码文本满足 Reads。返回的 Reader 只有在下一次调用 r 时才有效。

点编码是用于文本协议(如 SMTP)中的数据块的常用成帧。数据由一系列行组成,每行以“\ r \ n”结尾。序列本身结束于只包含一个点的一行:“。\ r \ n”。以点开头的行会用另外一个点进行转义,以避免看起来像序列的结尾。

Reader 的 Read 方法返回的解码格式会将“\ r \ n”行尾重写为简单的“\ n”,如果存在则删除前导点转义,并在消耗(并放弃)顺序线。

func (*Reader) ReadCodeLine

func (r *Reader) ReadCodeLine(expectCode int) (code int, message string, err error)

ReadCodeLine 读取表单的响应代码行

code message

其中代码是一个三位数的状态码,并且该消息延伸到该行的其余部分。这样的一个例子是:

220 plan9.bell-labs.com ESMTP

如果状态的前缀与 expectCode 中的数字不匹配,则 ReadCodeLine 返回,并将 err 设置为 &Error {code,message } 。例如,如果 expectCode 为31,如果状态不在 310,319 范围内,则会返回错误。

如果响应是多行的,则 ReadCodeLine 返回一个错误。

expectCode <= 0将禁用状态码的检查。

func (*Reader) ReadContinuedLine

func (r *Reader) ReadContinuedLine() (string, error)

ReadContinuedLine 从 r 中读取一个可能的连续行,消除最后的尾随 ASCII 空白。如果以空格或制表符开头,则第一行之后的行被认为是连续的。在返回的数据中,延续线与前一行仅由一个空格分开:删除了换行符和前导空格。

例如,考虑这个输入:

Line 1
  continued...Line 2

第一次调用 ReadContinuedLine 将返回“第1行继续...”,第2次将返回“第2行”。

只有白色空间的行不会继续。

func (*Reader) ReadContinuedLineBytes

func (r *Reader) ReadContinuedLineBytes() ([]byte, error)

ReadContinuedLineBytes 类似于 ReadContinuedLine,但返回 [] 字节而不是字符串。

func (*Reader) ReadDotBytes

func (r *Reader) ReadDotBytes() ([]byte, error)

ReadDotBytes 读取点编码并返回解码后的数据。

有关点编码的详细信息,请参阅 DotReader 方法的文档。

func (*Reader) ReadDotLines

func (r *Reader) ReadDotLines() ([]string, error)

ReadDotLines 读取一个点编码并返回一个包含解码行的片段,最后的 \ r \ n 或 \ n 将被删除。

有关点编码的详细信息,请参阅 DotReader 方法的文档。

func (*Reader) ReadLine

func (r *Reader) ReadLine() (string, error)

ReadLine 从 r 读取一行,从返回的字符串中删除最后的 \ n 或 \ r \ n 。

func (*Reader) ReadLineBytes

func (r *Reader) ReadLineBytes() ([]byte, error)

ReadLineBytes 与 ReadLine 类似,但返回 []字节而不是字符串。

func (*Reader) ReadMIMEHeader

func (r *Reader) ReadMIMEHeader() (MIMEHeader, error)

ReadMIMEHeader 从 r 读取 MIME 风格的头文件。标题是可能继续的 Key:Value 行以空行结尾的序列。返回的映射 m 将 CanonicalMIMEHeaderKey(key)映射为输入中遇到的相同顺序的值序列。

例如,考虑这个输入:

My-Key: Value 1Long-Key: Even
       Longer Value
My-Key: Value 2

鉴于该输入,ReadMIMEHeader 返回 map:

map[string][]string{"My-Key": {"Value 1", "Value 2"},"Long-Key": {"Even Longer Value"},}

func (*Reader) ReadResponse

func (r *Reader) ReadResponse(expectCode int) (code int, message string, err error)

ReadResponse 读取表单的多行响应:

code-message line 1code-message line 2...code message line n

代码是一个三位数的状态码。第一行以代码和连字符开头。响应由以相同的代码和空格开始的行结束。消息中的每一行都用换行符分隔(\ n)。

请参阅 RFC 959(http://www.ietf.org/rfc/rfc959.txt)的第36页,了解接受的另一种形式的响应的详细信息:

code-message line 1message line 2...code message line n

如果状态的前缀与 expectCode 中的数字不匹配,则 ReadResponse 返回,并将 err 设置为 &Error {code,message}。例如,如果 expectCode 为31,如果状态不在310,319范围内,则会返回错误。

expectCode <= 0 将禁用状态码的检查。

type Writer

Writer 实现方便的方法来编写对文本协议网络连接的请求或响应。

type Writer struct {
        W *bufio.Writer        // contains filtered or unexported fields}

func NewWriter

func NewWriter(w *bufio.Writer) *Writer

NewWriter 返回一个写入 w 的新 Writer 。

func (*Writer) DotWriter

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

DotWriter 返回一个写入器,可以用来为 w 写一个点编码。它需要在需要时插入前导点,将行结束符 \ n 转换为 \ r \ n,并在 DotWriter 关闭时添加最后的 \ r \ n 行。调用者应在下一次调用 w 上的方法之前关闭 DotWriter 。

有关点编码的详细信息,请参阅 Reader 的 DotReader 方法的文档。

func (*Writer) PrintfLine

func (w *Writer) PrintfLine(format string, args ...interface{}) error

PrintfLine 写入格式化的输出,后面跟着 \ r \ n 。

Previous article: Next article: