跳到主要内容

poc

poc 库是 yaklang 的底层 HTTP 报文工具核心,提供"原始报文级"的请求发送与对 HTTP 数据包任意部位的读取/构造/改写能力(近 190 个函数)。它不替你做任何隐式修改,适合编写 PoC、漏洞利用与对协议细节高度敏感的测试。

典型使用场景:

  • 发送请求:poc.HTTP / poc.HTTPEx 直接发原始报文,poc.Get / poc.Post / poc.Do 按方法发送,配合 poc.timeout / poc.proxy / poc.https / poc.host 等选项(这些选项均为 PocConfigOption)。
  • 读取报文:poc.GetHTTPPacketBody / poc.GetHTTPPacketHeader / poc.GetAllHTTPPacketQueryParams / poc.GetStatusCodeFromResponseGet* 家族解析请求/响应。
  • 构造改写:poc.ReplaceHTTPPacketBody / poc.ReplaceHTTPPacketHeader / poc.AppendHTTPPacketQueryParam / poc.DeleteHTTPPacketCookieReplace*/Append*/Delete* 家族精确改包。
  • 转换修复:poc.FixHTTPRequest / poc.FixHTTPPacketCRLF 修复报文,poc.CurlToHTTPRequest / poc.HTTPRequestToCurl 与 curl 互转,poc.GetUrlFromHTTPRequest 提取 URL。

与相邻库的关系:pocfuzz/fuzzx(批量变异)、nuclei/httptpl(模板检测)的底层报文基石;相比 http(通用易用客户端)更贴近字节、可控性更强。务必为网络请求设置 poc.timeout

快速上手(本地构造与读取报文,不发包即可验证):

// 用 poc.BuildRequest 在本地拼出请求报文(只应用"改写报文"的选项, 不真正发包)
raw = poc.BuildRequest(poc.BasicRequest(),
poc.replaceHost("yaklang.com"), // 改 Host
poc.replacePath("/docs/api/poc"), // 改路径
poc.replaceMethod("POST"), // 改方法
poc.replaceHeader("X-Token", "abc"), // 加/改请求头
)
println(string(raw)) // 打印拼好的完整请求报文

// 再用 Get* 家族从报文里精确读取字段
host = poc.GetHTTPPacketHeader(raw, "Host") // 读取大小写不敏感
println("Host =", host) // 预期输出: Host = yaklang.com
assert host == "yaklang.com", "host should be replaced"
assert string(raw).Contains("POST /docs/api/poc"), "first line should be rebuilt"

// 真正发包(需要可达目标, 这里仅示意): rsp, req = poc.HTTP(raw, poc.timeout(10))~

共 188 个函数

函数索引

函数参数返回值说明
poc.AppendHTTPPacketCookiepacket []byte, key string, value any[]byte是一个辅助函数,用于改变请求报文,添加Cookie请求头中的值
poc.AppendHTTPPacketFormEncodedpacket []byte, key string, value string[]byte是一个辅助函数,用于改变请求报文,添加请求体中的表单
poc.AppendHTTPPacketHeaderpacket []byte, headerKey string, headerValue any[]byte是一个辅助函数,用于改变请求报文,添加请求头。
poc.AppendHTTPPacketPathpacket []byte, p string[]byte是一个辅助函数,用于改变请求报文,在现有请求路径后添加请求路径
poc.AppendHTTPPacketPostParampacket []byte, key string, value string[]byte是一个辅助函数,用于改变请求报文,添加POST请求参数
poc.AppendHTTPPacketQueryParampacket []byte, key string, value string[]byte是一个辅助函数,用于改变请求报文,添加GET请求参数
poc.AutoUnzipPacketEncodingraw []byte[]byte, *PacketEncodingState, bool是一个辅助函数,用于将 HTTP 报文中的传输/内容编码“解开”,以便前端展示/编辑。
poc.BasicRequest-[]byte返回一个基本的 HTTP 请求,用于测试,它实际上返回一个b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"
poc.BasicResponse-[]byte返回一个基本的 HTTP 响应,用于测试,它实际上返回一个b"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
poc.CurlToHTTPRequestcommand string[]byte尝试将curl命令转换为HTTP请求报文,其返回值为bytes,即转换后的HTTP请求报文
poc.DeleteHTTPPacketCookiepacket []byte, key string[]byte是一个辅助函数,用于改变请求报文,删除Cookie中的值
poc.DeleteHTTPPacketFormpacket []byte, key string[]byte是一个辅助函数,用于改变请求报文,删除POST请求表单
poc.DeleteHTTPPacketHeaderpacket []byte, headerKey string[]byte是一个辅助函数,用于改变请求报文,删除请求头。
poc.DeleteHTTPPacketPostParampacket []byte, key string[]byte是一个辅助函数,用于改变请求报文,删除POST请求参数
poc.DeleteHTTPPacketQueryParampacket []byte, key string[]byte是一个辅助函数,用于改变请求报文,删除GET请求参数
poc.ExtractPostParamsraw []bytemap[string]string, error尝试将 HTTP 请求报文中的各种 POST 参数(普通格式,表单格式,JSON格式,XML格式)提取出来,返回提取出来的 POST 参数与错误
poc.FixHTTPPacketCRLFraw []byte, noFixLength bool[]byte修复一个HTTP报文的CRLF问题(正常的报文每行末尾为\r\n,但是某些报文可能是有\n),如果noFixLength为true,则不会修复Content-Length,否则会尝试修复Content-Length
poc.FixHTTPRequestraw []byte[]byte尝试对传入的HTTP请求报文进行修复,并返回修复后的请求
poc.FixHTTPResponser []byte[]byte尝试对传入的 HTTP 响应报文进行修复,并返回修复后的响应
poc.GetAllHTTPPacketPostParamspacket []bytemap[string]string是一个辅助函数,用于获取请求报文中的所有POST请求参数,其返回值为map[string]string,其中键为参数名,值为参数值
poc.GetAllHTTPPacketPostParamsFullpacket []bytemap[string][]string是一个辅助函数,用于获取请求报文中的所有POST请求参数,其返回值为map[string][]string,其中键为参数名,值为参数值切片
poc.GetAllHTTPPacketQueryParamspacket []bytemap[string]string是一个辅助函数,用于获取请求报文中的所有GET请求参数,其返回值为map[string]string,其中键为参数名,值为参数值
poc.GetAllHTTPPacketQueryParamsFullpacket []bytemap[string][]string是一个辅助函数,用于获取请求报文中的所有GET请求参数,其返回值为map[string][]string,其中键为参数名,值为参数值切片
poc.GetHTTPPacketBodypacket []byte[]byte是一个辅助函数,用于获取请求报文中的请求体,其返回值为bytes
poc.GetHTTPPacketContentTypepacket []bytestring是一个辅助函数,用于获取请求报文中的Content-Type请求头,其返回值为string
poc.GetHTTPPacketCookiepacket []byte, key stringstring是一个辅助函数,用于获取请求报文中Cookie值,其返回值为string
poc.GetHTTPPacketCookieFirstpacket []byte, key stringstring是一个辅助函数,用于获取请求报文中Cookie值,其返回值为string
poc.GetHTTPPacketCookieValuespacket []byte, key string[]string是一个辅助函数,用于获取请求报文中Cookie值,其返回值为[]string,这是因为Cookie可能存在多个相同键名的值
poc.GetHTTPPacketCookiespacket []bytemap[string]string是一个辅助函数,用于获取请求报文中所有Cookie值,其返回值为map[string]string
poc.GetHTTPPacketCookiesFullpacket []bytemap[string][]string是一个辅助函数,用于获取请求报文中所有Cookie值,其返回值为map[string][]string,这是因为Cookie可能存在多个相同键名的值
poc.GetHTTPPacketFirstLinepacket []bytestring, string, string是一个辅助函数,用于获取 HTTP 报文中第一行的值,其返回值为string,string,string
poc.GetHTTPPacketHeaderpacket []byte, key stringstring是一个辅助函数,用于获取请求报文中指定的请求头,其返回值为string
poc.GetHTTPPacketHeaderspacket []bytemap[string]string是一个辅助函数,用于获取请求报文中所有请求头,其返回值为map[string]string
poc.GetHTTPPacketHeadersFullpacket []bytemap[string][]string是一个辅助函数,用于获取请求报文中所有请求头,其返回值为map[string][]string,这是因为请求头可能存在多个相同键名的值
poc.GetHTTPPacketPostParampacket []byte, key stringstring是一个辅助函数,用于获取请求报文中指定的POST请求参数,其返回值为string
poc.GetHTTPPacketQueryParampacket []byte, key stringstring是一个辅助函数,用于获取请求报文中指定的GET请求参数,其返回值为string
poc.GetHTTPRequestMethodpacket []bytestring是一个辅助函数,用于获取请求报文中的请求方法,其返回值为string
poc.GetHTTPRequestPathpacket []bytestring是一个辅助函数,用于获取请求报文中的路径,返回值是 string,包含 query
poc.GetHTTPRequestPathWithoutQuerypacket []bytestring是一个辅助函数,用于获取请求报文中的路径,返回值是 string,不包含 query
poc.GetStatusCodeFromResponsepacket []byteint是一个辅助函数,用于获取响应报文中的状态码,其返回值为int
poc.GetUrlFromHTTPRequestscheme string, packet []bytestring是一个辅助函数,用于获取请求报文中的URL,其返回值为string
poc.HTTPPacketForceChunkedraw []byte[]byte将一个HTTP报文的body强制转换为chunked编码
poc.HTTPRequestToCurlhttps bool, raw anystring尝试将 HTTP 请求报文转换为curl命令。第一个参数为是否使用HTTPS,第二个参数为HTTP请求报文,其返回值为string,即转换后的curl命令
poc.IsResponseraw anyboolIsResp 判断传入的数据是否为 HTTP 响应报文
poc.ParseBytesToHTTPRequestraw []byte*http.Request, error将字节数组解析为 HTTP 请求
poc.ParseBytesToHTTPResponseres []byte*http.Response, error将字节数组解析为 HTTP 响应
poc.ParseMultiPartFormWithCallbackreq []byte, callback func(part *multipart.Part)error是一个辅助函数,用于尝试解析请求报文体中的表单并进行回调
poc.ParseUrlToHTTPRequestRawmethod string, i anybool, []byte, error将URL解析为原始 HTTP 请求报文,返回是否为 HTTPS,原始请求报文与错误
poc.RemoveSessionsession string-清除指定的 session,删除其关联的 cookiejar
poc.ReplaceAllHTTPPacketPostParamspacket []byte, values map[string]string[]byte是一个辅助函数,用于改变请求报文,修改所有 POST 请求参数,如果不存在则会增加,其接收一个 map[string]string 类型的参数,其中 key 为 POST 请求参数名,value 为 POST 请求参数值
poc.ReplaceAllHTTPPacketPostParamsWithoutEscapepacket []byte, values map[string]string[]byte是一个辅助函数,用于改变请求报文,修改所有 POST 请求参数,如果不存在则会增加,其接收一个 map[string]string 类型的参数,其中 key 为 POST 请求参数名,value 为 POST 请求参数值
poc.ReplaceAllHTTPPacketQueryParamspacket []byte, values map[string]string[]byte是一个辅助函数,用于改变请求报文,修改所有 GET 请求参数,如果不存在则会增加,其接收一个 map[string]string 类型的参数,其中 key 为请求参数名,value 为请求参数值
poc.ReplaceAllHTTPPacketQueryParamsWithoutEscapepacket []byte, values map[string]string[]byte是一个辅助函数,用于改变请求报文,修改所有 GET 请求参数,如果不存在则会增加,其接收一个 map[string]string 类型的参数,其中 key 为请求参数名,value 为请求参数值
poc.ReplaceBodyraw []byte, body []byte, chunk bool[]byte将原始 HTTP 请求报文中的 body 替换为指定的 body,并指定是否为 chunked,返回新的 HTTP 请求报文
poc.ReplaceHTTPPacketBasicAuthpacket []byte, username string, password string[]byte是一个辅助函数,用于改变请求报文,修改Authorization请求头为基础认证的密文,如果不存在则会增加,实际上是ReplaceHTTPPacketHeader("Authorization", codec.EncodeBase64(username + ":" + password))的简写
poc.ReplaceHTTPPacketBodypacket []byte, body []byte[]byte是一个辅助函数,用于改变 HTTP 报文,修改 HTTP 报文主体内容,第一个参数为原始 HTTP 报文,第二个参数为修改的报文主体内容
poc.ReplaceHTTPPacketCookiepacket []byte, key string, value any[]byte是一个辅助函数,用于改变请求报文,修改Cookie请求头中的值,如果不存在则会增加
poc.ReplaceHTTPPacketCookiespacket []byte, m any[]byte是一个辅助函数,用于改变请求报文,修改Cookie请求头
poc.ReplaceHTTPPacketFirstLinepacket []byte, firstLine string[]byte是一个辅助,用于改变请求报文,修改第一行(即请求方法,请求路径,协议版本)
poc.ReplaceHTTPPacketFormEncodedpacket []byte, key string, value string[]byte是一个辅助函数,用于改变请求报文,替换请求体中的表单,如果不存在则会增加
poc.ReplaceHTTPPacketHeaderpacket []byte, headerKey string, headerValue any[]byte是一个辅助函数,用于改变请求报文,修改请求头,如果不存在则会增加。
poc.ReplaceHTTPPacketHostpacket []byte, host string[]byte是一个辅助函数,用于改变请求报文,修改Host请求头,如果不存在则会增加,实际上是ReplaceHTTPPacketHeader("Host", host)的简写
poc.ReplaceHTTPPacketJsonBodypacket []byte, jsonMap map[string]any[]byte是一个辅助函数,用于改变 HTTP 报文,修改 HTTP 报文主体内容( json 格式),第一个参数为原始 HTTP 报文,第二个参数为修改的报文主体内容( map 对象)
poc.ReplaceHTTPPacketMethodpacket []byte, newMethod string[]byte是一个辅助函数,用于改变请求报文,修改请求方法
poc.ReplaceHTTPPacketPathpacket []byte, p string[]byte是一个辅助函数,用于改变请求报文,修改请求路径
poc.ReplaceHTTPPacketPathFuncpacket []byte, callback func(originPath string) string[]byte是一个辅助函数,使用回调改变请求报文中的请求路径
poc.ReplaceHTTPPacketPostParampacket []byte, key string, value string[]byte是一个辅助函数,用于改变请求报文,修改POST请求参数,如果不存在则会增加
poc.ReplaceHTTPPacketQueryParampacket []byte, key string, value string[]byte是一个辅助函数,用于改变请求报文,修改GET请求参数,如果不存在则会增加
poc.ReplaceHTTPPacketQueryParamWithoutEscapepacket []byte, key string, value string[]byte是一个辅助函数,用于改变请求报文,修改所有 GET 请求参数,如果不存在则会增加,其接收一个 map[string]string 类型的参数,其中 key 为请求参数名,value 为请求参数值

可变参数函数索引

函数参数返回值说明
poc.AppendHTTPPacketUploadFilepacket []byte, fieldName string, fileName string, fileContent any, contentType ...string[]byte是一个辅助函数,用于改变请求报文,添加请求体中的上传的文件,其中第一个参数为原始请求报文,第二个参数为表单名,第三个参数为文件名,第四个参数为文件内容,第五个参数是可选参数,为文件类型(Content-Type)
poc.BuildRequesti any, opts ...PocConfigOption[]byte是一个用于辅助构建请求报文的工具函数,它第一个参数可以接收 []byte, string, http.Request 结构体,接下来可以接收零个到多个请求选项,修改请求报文的选项将被作用,最后返回构建好的请求报文
poc.DeleteurlStr string, opts ...PocConfigOption*lowhttp.LowhttpResponse, *http.Request, error向指定 URL 发送 DELETE 请求并且返回响应结构体,请求结构体以及错误,它的第一个参数是 URL 字符串,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如对设置超时时间,或者修改请求报文等
poc.Domethod string, urlStr string, opts ...PocConfigOption*lowhttp.LowhttpResponse, *http.Request, error向指定 URL 发送指定请求方法的请求并且返回响应结构体,请求结构体以及错误,它的是第一个参数是请求方法,第二个参数 URL 字符串,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如设置超时时间,或者修改请求报文等
poc.DownloadurlStr string, opts ...PocConfigOptionstring, error从指定 URL 下载文件并保存到本地,返回保存的文件路径和错误
poc.DownloadWithMethodmethod string, urlStr string, opts ...PocConfigOptionstring, error使用指定的 HTTP 方法从 URL 下载文件
poc.GeturlStr string, opts ...PocConfigOption*lowhttp.LowhttpResponse, *http.Request, error向指定 URL 发送 GET 请求并且返回响应结构体,请求结构体以及错误,它的第一个参数是 URL 字符串,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如对设置超时时间,或者修改请求报文等
poc.HTTPi any, opts ...PocConfigOption[]byte, []byte, error发送请求并且返回原始响应报文,原始请求报文以及错误,它的第一个参数可以接收 []byte, string, http.Request 结构体,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如设置超时时间,或者修改请求报文等
poc.HTTPExi any, opts ...PocConfigOption*lowhttp.LowhttpResponse, *http.Request, error与 HTTP 类似,它发送请求并且返回响应结构体,请求结构体以及错误,它的第一个参数可以接收 []byte, string, http.Request 结构体,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如设置超时时间,或者修改请求报文等
poc.HeadurlStr string, opts ...PocConfigOption*lowhttp.LowhttpResponse, *http.Request, error向指定 URL 发送 HEAD 请求并且返回响应结构体,请求结构体以及错误,它的第一个参数是 URL 字符串,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如对设置超时时间,或者修改请求报文等
poc.OptionsurlStr string, opts ...PocConfigOption*lowhttp.LowhttpResponse, *http.Request, error向指定 URL 发送 OPTIONS 请求并且返回响应结构体,请求结构体以及错误,它的第一个参数是 URL 字符串,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如对设置超时时间,或者修改请求报文等
poc.PosturlStr string, opts ...PocConfigOption*lowhttp.LowhttpResponse, *http.Request, error向指定 URL 发送 POST 请求并且返回响应结构体,请求结构体以及错误,它的第一个参数是 URL 字符串,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如对设置超时时间,或者修改请求报文等
poc.ReplaceHTTPPacketUploadFilepacket []byte, fieldName string, fileName string, fileContent any, contentType ...string[]byte是一个辅助函数,用于改变请求报文,替换请求体中的上传的文件,其中第一个参数为原始请求报文,第二个参数为表单名,第三个参数为文件名,第四个参数为文件内容,第五个参数是可选参数,为文件类型(Content-Type),如果表单名不存在则会增加
poc.Splitraw []byte, hook ...func(line string)string, []byte切割 HTTP 报文,返回响应头和响应体,其第一个参数是原始HTTP报文,接下来可以接收零个到多个回调函数,其在每次解析到请求头时回调
poc.Websocketraw any, opts ...PocConfigOption[]byte, []byte, error实际上等价于poc.HTTP(..., poc.websocket(true)),用于快速发送请求并建立websocket连接并且返回原始响应报文,原始请求报文以及错误

函数详情

AppendHTTPPacketCookie

AppendHTTPPacketCookie(packet []byte, key string, value any) []byte

是一个辅助函数,用于改变请求报文,添加Cookie请求头中的值

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组
keystringCookie 名称
valueanyCookie 的值

返回值

序号类型说明
r1[]byte修改后的 HTTP 报文字节数组

示例

poc.AppendHTTPPacketCookie(poc.BasicRequest(), "aaa", "bbb") // 添加cookie键值对aaa:bbb

AppendHTTPPacketFormEncoded

AppendHTTPPacketFormEncoded(packet []byte, key string, value string) []byte

是一个辅助函数,用于改变请求报文,添加请求体中的表单

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
keystring表单字段名
valuestring表单字段值

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

poc.AppendHTTPPacketFormEncoded(`POST /post HTTP/1.1
Host: pie.dev
Content-Type: multipart/form-data; boundary=------------------------OFHnlKtUimimGcXvRSxgCZlIMAyDkuqsxeppbIFm
Content-Length: 203

--------------------------OFHnlKtUimimGcXvRSxgCZlIMAyDkuqsxeppbIFm
Content-Disposition: form-data; name="aaa"

bbb
--------------------------OFHnlKtUimimGcXvRSxgCZlIMAyDkuqsxeppbIFm--`, "ccc", "ddd") // 添加POST请求表单,其中ccc为键,ddd为值

AppendHTTPPacketHeader

AppendHTTPPacketHeader(packet []byte, headerKey string, headerValue any) []byte

是一个辅助函数,用于改变请求报文,添加请求头。 无论 header 是否已存在都会直接附加(大小写不敏感行为与 Replace 不冲突)。

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组
headerKeystring请求头名称
headerValueany请求头的值

返回值

序号类型说明
r1[]byte修改后的 HTTP 报文字节数组

示例:示例:追加一个自定义请求头

// 关键词: poc.AppendHTTPPacketHeader, 追加请求头
packet = poc.BasicRequest()
modified = poc.AppendHTTPPacketHeader(packet, "X-Trace-Id", "abc-123") // 直接附加,不去重
println(string(modified)) // 打印查看追加结果
assert poc.GetHTTPPacketHeader(modified, "X-Trace-Id") == "abc-123", "header should be appended"

AppendHTTPPacketPath

AppendHTTPPacketPath(packet []byte, p string) []byte

是一个辅助函数,用于改变请求报文,在现有请求路径后添加请求路径

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
pstring要追加到现有路径后的路径片段

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

poc.AppendHTTPPacketPath(`GET /docs HTTP/1.1
Host: yaklang.com
`, "/api/poc") // 向 example.com 发起请求,实际上请求路径改为/docs/api/poc

AppendHTTPPacketPostParam

AppendHTTPPacketPostParam(packet []byte, key string, value string) []byte

是一个辅助函数,用于改变请求报文,添加POST请求参数

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
keystringPOST 请求参数名
valuestringPOST 请求参数值

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

poc.AppendHTTPPacketPostParam(poc.BasicRequest(), "a", "b") // 向 pie.dev 发起请求,添加POST请求参数a,值为b

AppendHTTPPacketQueryParam

AppendHTTPPacketQueryParam(packet []byte, key string, value string) []byte

是一个辅助函数,用于改变请求报文,添加GET请求参数

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
keystringGET 请求参数名
valuestringGET 请求参数值

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

poc.AppendHTTPPacketQueryParam(poc.BasicRequest(), "a", "b") // 添加GET请求参数a,值为b

AutoUnzipPacketEncoding

AutoUnzipPacketEncoding(raw []byte) (plain []byte, state *PacketEncodingState, ok bool)

是一个辅助函数,用于将 HTTP 报文中的传输/内容编码“解开”,以便前端展示/编辑。

  • 支持处理 Transfer-Encoding: chunked(会自动反分块,并移除相关头)

  • 支持处理 Content-Encoding(如 gzip/br/zstd/zlib/deflate),优先按 header 解码;header 缺失时会尝试用 magic number 判断(如 gzip/zstd/zlib)

  • 失败时保持保守:返回 (raw, nil, false),避免破坏原始报文

该函数通常与 AutoZipPacketEncoding 配对使用:前端编辑 plain 报文后,服务端可用 state 将其重新压回原始编码形态。

参数

参数名类型说明
raw[]byte原始 HTTP 报文字节数组

返回值

序号类型说明
plain[]byte解开编码后的明文 HTTP 报文字节数组
state*PacketEncodingState编码状态对象,可用于将明文重新压回原始编码形态
okbool是否成功解开编码

示例

raw := []byte(`HTTP/1.1 200 OK
Transfer-Encoding: chunked

5
hello
0

`)
plain, state, ok = poc.AutoUnzipPacketEncoding(raw)
// plain 的 body 变为 "hello",并移除了 Transfer-Encoding: chunked

BasicRequest

BasicRequest() []byte

返回一个基本的 HTTP 请求,用于测试,它实际上返回一个b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"

返回值

序号类型说明
r1[]byte基本 HTTP 请求报文字节数组

示例

poc.BasicRequest() // b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"

BasicResponse

BasicResponse() []byte

返回一个基本的 HTTP 响应,用于测试,它实际上返回一个b"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"

返回值

序号类型说明
r1[]byte基本 HTTP 响应报文字节数组

示例

poc.BasicResponse() // b"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"

CurlToHTTPRequest

CurlToHTTPRequest(command string) (req []byte)

尝试将curl命令转换为HTTP请求报文,其返回值为bytes,即转换后的HTTP请求报文

参数

参数名类型说明
commandstringcurl 命令字符串

返回值

序号类型说明
req[]byte转换后的 HTTP 请求报文字节数组

示例:示例:把 curl 命令转成 HTTP 请求报文

// 关键词: poc.CurlToHTTPRequest, curl转报文
req = poc.CurlToHTTPRequest("curl -X POST -d 'a=b&c=d' http://example.com")
println(string(req))
assert poc.GetHTTPRequestMethod(req) == "POST", "method should be POST"
assert string(poc.GetHTTPPacketBody(req)) == "a=b&c=d", "body should come from -d"

DeleteHTTPPacketCookie

DeleteHTTPPacketCookie(packet []byte, key string) []byte

是一个辅助函数,用于改变请求报文,删除Cookie中的值

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组
keystring要删除的 Cookie 名称

返回值

序号类型说明
r1[]byte修改后的 HTTP 报文字节数组

示例

poc.DeleteHTTPPacketCookie(`GET /get HTTP/1.1
Content-Type: application/json
Cookie: aaa=bbb; ccc=ddd
Host: pie.dev

`, "aaa") // 删除Cookie中的aaa

DeleteHTTPPacketForm

DeleteHTTPPacketForm(packet []byte, key string) []byte

是一个辅助函数,用于改变请求报文,删除POST请求表单

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
keystring要删除的表单字段名

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

poc.DeleteHTTPPacketForm(`POST /post HTTP/1.1
Host: pie.dev
Content-Type: multipart/form-data; boundary=------------------------OFHnlKtUimimGcXvRSxgCZlIMAyDkuqsxeppbIFm
Content-Length: 308

--------------------------OFHnlKtUimimGcXvRSxgCZlIMAyDkuqsxeppbIFm
Content-Disposition: form-data; name="aaa"

bbb
--------------------------OFHnlKtUimimGcXvRSxgCZlIMAyDkuqsxeppbIFm
Content-Disposition: form-data; name="ccc"

ddd
--------------------------OFHnlKtUimimGcXvRSxgCZlIMAyDkuqsxeppbIFm--`, "aaa") // 删除POST请求表单aaa

DeleteHTTPPacketHeader

DeleteHTTPPacketHeader(packet []byte, headerKey string) []byte

是一个辅助函数,用于改变请求报文,删除请求头。 默认情况下匹配会忽略 Header 名大小写,若需严格匹配可使用 DeleteHTTPPacketHeaderStrict。

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组
headerKeystring要删除的请求头名称

返回值

序号类型说明
r1[]byte修改后的 HTTP 报文字节数组

示例:示例:删除指定请求头(忽略大小写)

// 关键词: poc.DeleteHTTPPacketHeader, 删除请求头
packet = `GET /get HTTP/1.1
Content-Type: application/json
AAA: BBB
Host: pie.dev

`
modified = poc.DeleteHTTPPacketHeader(packet, "AAA") // 匹配时忽略大小写
println(string(modified)) // 打印查看, AAA 头已被删除
assert poc.GetHTTPPacketHeader(modified, "AAA") == "", "AAA header should be removed"

DeleteHTTPPacketPostParam

DeleteHTTPPacketPostParam(packet []byte, key string) []byte

是一个辅助函数,用于改变请求报文,删除POST请求参数

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
keystring要删除的 POST 请求参数名

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

poc.DeleteHTTPPacketPostParam(`POST /post HTTP/1.1
Content-Type: application/json
Content-Length: 7
Host: pie.dev

a=b&c=d`, "a") // 删除POST请求参数a

DeleteHTTPPacketQueryParam

DeleteHTTPPacketQueryParam(packet []byte, key string) []byte

是一个辅助函数,用于改变请求报文,删除GET请求参数

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
keystring要删除的 GET 请求参数名

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

poc.DeleteHTTPPacketQueryParam(`GET /get?a=b&c=d HTTP/1.1
Content-Type: application/json
Host: pie.dev

`, "a") // 删除GET请求参数a

ExtractPostParams

ExtractPostParams(raw []byte) (map[string]string, error)

尝试将 HTTP 请求报文中的各种 POST 参数(普通格式,表单格式,JSON格式,XML格式)提取出来,返回提取出来的 POST 参数与错误

参数

参数名类型说明
raw[]byte原始 HTTP 请求报文字节数组

返回值

序号类型说明
r1map[string]string提取出来的 POST 参数键值对表
r2error错误信息,无法提取时返回非空

示例

params, err = poc.ExtractPostParams("POST / HTTP/1.1\r\nContent-Type: application/json\r\nHost: example.com\r\n\r\n{\"key\": \"value\"}")
dump(params) // {"key": "value"}

FixHTTPPacketCRLF

FixHTTPPacketCRLF(raw []byte, noFixLength bool) []byte

修复一个HTTP报文的CRLF问题(正常的报文每行末尾为\r\n,但是某些报文可能是有\n),如果noFixLength为true,则不会修复Content-Length,否则会尝试修复Content-Length

参数

参数名类型说明
raw[]byte原始 HTTP 报文字节数组
noFixLengthbool是否不修复 Content-Length,为 true 时不修复

返回值

序号类型说明
r1[]byte修复后的 HTTP 报文字节数组

示例

poc.FixHTTPPacketCRLF(`POST / HTTP/1.1
Host: example.com
Content-Length: 11

hello world`, false)

FixHTTPRequest

FixHTTPRequest(raw []byte) []byte

尝试对传入的HTTP请求报文进行修复,并返回修复后的请求

参数

参数名类型说明
raw[]byte原始 HTTP 请求报文字节数组

返回值

序号类型说明
r1[]byte修复后的 HTTP 请求报文字节数组

示例:示例:修复请求报文(自动补齐 Content-Length 等)

// 关键词: poc.FixHTTPRequest, 修复请求报文
// 这个请求声明了 Content-Length: 100, 但实际 body 只有 3 字节, FixHTTPRequest 会修正它
broken = "POST / HTTP/1.1\r\nHost: example.com\r\nContent-Length: 100\r\n\r\nabc"
fixed = poc.FixHTTPRequest(broken)
println(string(fixed))
assert poc.GetHTTPPacketHeader(fixed, "Content-Length") == "3", "content-length should be fixed to real body length"

FixHTTPResponse

FixHTTPResponse(r []byte) []byte

尝试对传入的 HTTP 响应报文进行修复,并返回修复后的响应

参数

参数名类型说明
r[]byte原始 HTTP 响应报文字节数组

返回值

序号类型说明
r1[]byte修复后的 HTTP 响应报文字节数组

示例:示例:修复响应报文(规整 CRLF 与 Content-Length)

// 关键词: poc.FixHTTPResponse, 修复响应报文
// 这个响应用了 LF 换行且未声明 Content-Length, FixHTTPResponse 会把它规整为标准报文
broken = "HTTP/1.1 200 OK\nContent-Type: text/plain\n\nhello"
fixed = poc.FixHTTPResponse(broken)
println(string(fixed))
assert poc.GetStatusCodeFromResponse(fixed) == 200, "status code should still be 200"
assert string(poc.GetHTTPPacketBody(fixed)) == "hello", "body should be preserved"

GetAllHTTPPacketPostParams

GetAllHTTPPacketPostParams(packet []byte) (params map[string]string)

是一个辅助函数,用于获取请求报文中的所有POST请求参数,其返回值为map[string]string,其中键为参数名,值为参数值

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组

返回值

序号类型说明
paramsmap[string]string所有 POST 请求参数的键值对映射

示例

poc.GetAllHTTPPacketPostParams(`POST /post HTTP/1.1
Content-Type: application/json
COntent-Length: 7
Host: pie.dev

a=b&c=d`) // 获取所有POST请求参数

GetAllHTTPPacketPostParamsFull

GetAllHTTPPacketPostParamsFull(packet []byte) (params map[string][]string)

是一个辅助函数,用于获取请求报文中的所有POST请求参数,其返回值为map[string][]string,其中键为参数名,值为参数值切片

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组

返回值

序号类型说明
paramsmap[string][]string所有 POST 请求参数的键到值列表的映射

示例

poc.GetAllHTTPPacketPostParams(`POST /post HTTP/1.1
Content-Type: application/json
COntent-Length: 7
Host: pie.dev

a=b&a=c`) // 获取所有POST请求参数,这里会返回{"a":["b", "c"]}

GetAllHTTPPacketQueryParams

GetAllHTTPPacketQueryParams(packet []byte) (params map[string]string)

是一个辅助函数,用于获取请求报文中的所有GET请求参数,其返回值为map[string]string,其中键为参数名,值为参数值

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组

返回值

序号类型说明
paramsmap[string]string所有 GET 请求参数的键值对映射

示例

poc.GetAllHTTPPacketQueryParams(`GET /get?a=b&c=d HTTP/1.1
Content-Type: application/json
Host: pie.dev

`) // 获取所有GET请求参数

GetAllHTTPPacketQueryParamsFull

GetAllHTTPPacketQueryParamsFull(packet []byte) (params map[string][]string)

是一个辅助函数,用于获取请求报文中的所有GET请求参数,其返回值为map[string][]string,其中键为参数名,值为参数值切片

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组

返回值

序号类型说明
paramsmap[string][]string所有 GET 请求参数的键到值列表的映射

示例

poc.GetAllHTTPPacketQueryParamsFull(`GET /get?a=b&a=c HTTP/1.1
Content-Type: application/json
Host: pie.dev

`) // 返回所有GET请求参数,这里会返回{"a":["b", "c"]}

GetHTTPPacketBody

GetHTTPPacketBody(packet []byte) (body []byte)

是一个辅助函数,用于获取请求报文中的请求体,其返回值为bytes

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组

返回值

序号类型说明
body[]byte报文主体内容字节数组

示例:示例:提取报文 body(请求体/响应体通用)

// 关键词: poc.GetHTTPPacketBody, 提取请求体/响应体
packet = `POST /post HTTP/1.1
Content-Type: application/json
Content-Length: 7
Host: pie.dev

a=b&c=d`
body = poc.GetHTTPPacketBody(packet) // 返回值是 bytes
println("body =", string(body)) // 预期输出: body = a=b&c=d
assert string(body) == "a=b&c=d", "should extract packet body"

GetHTTPPacketContentType

GetHTTPPacketContentType(packet []byte) (contentType string)

是一个辅助函数,用于获取请求报文中的Content-Type请求头,其返回值为string

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组

返回值

序号类型说明
contentTypestringContent-Type 请求头的值

示例

poc.GetHTTPPacketContentType(`POST /post HTTP/1.1
Content-Type: application/json
COntent-Length: 7
Host: pie.dev

a=b&c=d`) // 获取Content-Type请求头

GetHTTPPacketCookie

GetHTTPPacketCookie(packet []byte, key string) (cookieValue string)

是一个辅助函数,用于获取请求报文中Cookie值,其返回值为string

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组
keystringCookie 名称

返回值

序号类型说明
cookieValuestring匹配该名称的 Cookie 值

示例

poc.GetHTTPPacketCookie(`GET /get HTTP/1.1
Content-Type: application/json
Cookie: a=b; c=d
Host: pie.dev

`, "a") // 获取键名为a的Cookie值,这里会返回"b"

GetHTTPPacketCookieFirst

GetHTTPPacketCookieFirst(packet []byte, key string) (cookieValue string)

是一个辅助函数,用于获取请求报文中Cookie值,其返回值为string

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组
keystringCookie 名称

返回值

序号类型说明
cookieValuestring匹配该名称的第一个 Cookie 值

示例

poc.GetHTTPPacketCookieFirst(`GET /get HTTP/1.1
Content-Type: application/json
Cookie: a=b; c=d
Host: pie.dev

`, "a") // 获取键名为a的Cookie值,这里会返回"b"

GetHTTPPacketCookieValues

GetHTTPPacketCookieValues(packet []byte, key string) (cookieValues []string)

是一个辅助函数,用于获取请求报文中Cookie值,其返回值为[]string,这是因为Cookie可能存在多个相同键名的值

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组
keystringCookie 名称

返回值

序号类型说明
cookieValues[]string匹配该名称的所有 Cookie 值列表

示例

poc.GetHTTPPacketCookieValues(`GET /get HTTP/1.1
Content-Type: application/json
Cookie: a=b; a=c
Host: pie.dev

`, "a") // 获取键名为a的Cookie值,这里会返回["b", "c"]

GetHTTPPacketCookies

GetHTTPPacketCookies(packet []byte) (cookies map[string]string)

是一个辅助函数,用于获取请求报文中所有Cookie值,其返回值为map[string]string

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组

返回值

序号类型说明
cookiesmap[string]string所有 Cookie 的键值对映射

示例

poc.GetHTTPPacketCookies(`GET /get HTTP/1.1
Content-Type: application/json
Cookie: a=b; c=d
Host: pie.dev

`) // 获取所有Cookie值,这里会返回{"a":"b", "c":"d"}

GetHTTPPacketCookiesFull

GetHTTPPacketCookiesFull(packet []byte) (cookies map[string][]string)

是一个辅助函数,用于获取请求报文中所有Cookie值,其返回值为map[string][]string,这是因为Cookie可能存在多个相同键名的值

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组

返回值

序号类型说明
cookiesmap[string][]string所有 Cookie 的键到值列表的映射

示例

poc.GetHTTPPacketCookiesFull(`GET /get HTTP/1.1
Content-Type: application/json
Cookie: a=b; a=c; c=d
Host: pie.dev

`) // 获取所有Cookie值,这里会返回{"a":["b", "c"], "c":["d"]}

GetHTTPPacketFirstLine

GetHTTPPacketFirstLine(packet []byte) (string, string, string)

是一个辅助函数,用于获取 HTTP 报文中第一行的值,其返回值为string,string,string

在请求报文中,其三个返回值分别为:请求方法,请求URI,协议版本

在响应报文中,其三个返回值分别为:协议版本,状态码,状态码描述

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组

返回值

序号类型说明
r1string第一个字段(请求方法 或 协议版本)
r2string第二个字段(请求URI 或 状态码)
r3string第三个字段(协议版本 或 状态码描述)

示例

poc.GetHTTPPacketFirstLine(`GET /get HTTP/1.1
Content-Type: application/json
Cookie: a=b; a=c; c=d
Host: pie.dev

`) // 获取请求方法,请求URI,协议版本,这里会返回"GET", "/get", "HTTP/1.1"

GetHTTPPacketHeader

GetHTTPPacketHeader(packet []byte, key string) (header string)

是一个辅助函数,用于获取请求报文中指定的请求头,其返回值为string

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组
keystring请求头名称

返回值

序号类型说明
headerstring匹配该名称的请求头的值

示例:示例:从报文中读取指定请求头(大小写不敏感)

// 关键词: poc.GetHTTPPacketHeader, 读取请求头/响应头
packet = `GET /get HTTP/1.1
Content-Type: application/json
Cookie: a=b; a=c; c=d
Host: pie.dev

`
ct = poc.GetHTTPPacketHeader(packet, "Content-Type") // 匹配时大小写不敏感
println("Content-Type =", ct) // 预期输出: Content-Type = application/json
assert ct == "application/json", "should read Content-Type header"

GetHTTPPacketHeaders

GetHTTPPacketHeaders(packet []byte) (headers map[string]string)

是一个辅助函数,用于获取请求报文中所有请求头,其返回值为map[string]string

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组

返回值

序号类型说明
headersmap[string]string所有请求头的键值对映射

示例

poc.GetHTTPPacketHeaders(`GET /get HTTP/1.1
Content-Type: application/json
Cookie: a=b; a=c; c=d
Host: pie.dev

`) // 获取所有请求头,这里会返回{"Content-Type": "application/json", "Cookie": "a=b; a=c; c=d", "Host": "pie.dev"}

GetHTTPPacketHeadersFull

GetHTTPPacketHeadersFull(packet []byte) (headers map[string][]string)

是一个辅助函数,用于获取请求报文中所有请求头,其返回值为map[string][]string,这是因为请求头可能存在多个相同键名的值

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组

返回值

序号类型说明
headersmap[string][]string所有请求头的键到值列表的映射

示例

poc.GetHTTPPacketHeadersFull(`GET /get HTTP/1.1
Content-Type: application/json
Cookie: a=b; a=c; c=d
Cookie: e=f
Host: pie.dev

`) // 获取所有请求头,这里会返回{"Content-Type": ["application/json"], "Cookie": []"a=b; a=c; c=d", "e=f"], "Host": ["pie.dev"]}

GetHTTPPacketPostParam

GetHTTPPacketPostParam(packet []byte, key string) (paramValue string)

是一个辅助函数,用于获取请求报文中指定的POST请求参数,其返回值为string

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
keystringPOST 请求参数名

返回值

序号类型说明
paramValuestring匹配该名称的 POST 请求参数的值

示例

poc.GetHTTPPacketPostParam(`POST /post HTTP/1.1
Content-Type: application/json
COntent-Length: 7
Host: pie.dev

a=b&c=d`, "a") // 获取POST请求参数a的值

GetHTTPPacketQueryParam

GetHTTPPacketQueryParam(packet []byte, key string) (paramValue string)

是一个辅助函数,用于获取请求报文中指定的GET请求参数,其返回值为string

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
keystringGET 请求参数名

返回值

序号类型说明
paramValuestring匹配该名称的 GET 请求参数的值

示例

poc.GetHTTPPacketQueryParam(`GET /get?a=b&c=d HTTP/1.1
Content-Type: application/json
Host: pie.dev

`, "a") // 获取GET请求参数a的值

GetHTTPRequestMethod

GetHTTPRequestMethod(packet []byte) (method string)

是一个辅助函数,用于获取请求报文中的请求方法,其返回值为string

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组

返回值

序号类型说明
methodstring请求方法,如 GET、POST

示例

poc.GetHTTPRequestMethod(`GET /get HTTP/1.1
Content-Type: application/json
Cookie: a=b; a=c; c=d
Host: pie.dev

`) // 获取请求方法,这里会返回"GET"

GetHTTPRequestPath

GetHTTPRequestPath(packet []byte) (path string)

是一个辅助函数,用于获取请求报文中的路径,返回值是 string,包含 query

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组

返回值

序号类型说明
pathstring包含 query 的请求路径

示例

poc.GetHTTPRequestPath("GET /a/bc.html?a=1 HTTP/1.1\r\nHost: www.example.com\r\n\r\n") // /a/bc.html?a=1

GetHTTPRequestPathWithoutQuery

GetHTTPRequestPathWithoutQuery(packet []byte) (path string)

是一个辅助函数,用于获取请求报文中的路径,返回值是 string,不包含 query

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组

返回值

序号类型说明
pathstring不包含 query 的请求路径

示例

poc.GetHTTPRequestPathWithoutQuery("GET /a/bc.html?a=1 HTTP/1.1\r\nHost: www.example.com\r\n\r\n") // /a/bc.html

GetStatusCodeFromResponse

GetStatusCodeFromResponse(packet []byte) (statusCode int)

是一个辅助函数,用于获取响应报文中的状态码,其返回值为int

参数

参数名类型说明
packet[]byte原始 HTTP 响应报文字节数组

返回值

序号类型说明
statusCodeint响应状态码

示例:示例:从响应报文取状态码

// 关键词: poc.GetStatusCodeFromResponse, 响应状态码
response = `HTTP/1.1 200 OK
Content-Length: 5

hello`
code = poc.GetStatusCodeFromResponse(response) // 返回 int
println("status code =", code) // 预期输出: status code = 200
assert code == 200, "should parse status code 200"

GetUrlFromHTTPRequest

GetUrlFromHTTPRequest(scheme string, packet []byte) (url string)

是一个辅助函数,用于获取请求报文中的URL,其返回值为string

参数

参数名类型说明
schemestringURL 协议,如 http、https,留空默认为 http
packet[]byte原始 HTTP 请求报文字节数组

返回值

序号类型说明
urlstring拼接后的完整 URL

示例

poc.GetUrlFromHTTPRequest("https", `GET /get HTTP/1.1
Content-Type: application/json
Host: pie.dev

`) // 获取URL,这里会返回"https://pie.dev/get"

HTTPPacketForceChunked

HTTPPacketForceChunked(raw []byte) []byte

将一个HTTP报文的body强制转换为chunked编码

参数

参数名类型说明
raw[]byte原始 HTTP 报文字节数组

返回值

序号类型说明
r1[]byte转换为 chunked 编码后的 HTTP 报文字节数组

示例

poc.HTTPPacketForceChunked(`POST / HTTP/1.1
Host: example.com
Content-Length: 11

hello world`)

HTTPRequestToCurl

HTTPRequestToCurl(https bool, raw any) (curlCommand string)

尝试将 HTTP 请求报文转换为curl命令。第一个参数为是否使用HTTPS,第二个参数为HTTP请求报文,其返回值为string,即转换后的curl命令

参数

参数名类型说明
httpsbool是否使用 HTTPS
rawanyHTTP 请求报文,可为 string 或 bytes

返回值

序号类型说明
curlCommandstring转换后的 curl 命令字符串

示例:示例:把 HTTP 请求报文转成 curl 命令

// 关键词: poc.HTTPRequestToCurl, 报文转curl
cmd = poc.HTTPRequestToCurl(true, "GET /api HTTP/1.1\r\nHost: example.com\r\n\r\n") // 第一个参数表示是否 https
println(cmd)
assert cmd.Contains("curl"), "should produce a curl command"
assert cmd.Contains("https://example.com/api"), "should target the https url"

IsResponse

IsResponse(raw any) (isHTTPResponse bool)

IsResp 判断传入的数据是否为 HTTP 响应报文

参数

参数名类型说明
rawany待判断的数据,可为字节数组或字符串

返回值

序号类型说明
isHTTPResponsebool是否为 HTTP 响应报文

示例:示例:判断一段数据是否为 HTTP 响应报文

// 关键词: poc.IsResponse, 判断响应报文
// 注意: 在 yak 中该函数导出名为 poc.IsResponse
isResp = poc.IsResponse(b"HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nok")
println("is response =", isResp) // 预期输出: is response = true
assert isResp, "should be recognized as response"
isReq = poc.IsResponse(b"GET / HTTP/1.1\r\nHost: a.com\r\n\r\n")
assert !isReq, "request packet should not be a response"

ParseBytesToHTTPRequest

ParseBytesToHTTPRequest(raw []byte) (reqInst *http.Request, err error)

将字节数组解析为 HTTP 请求

参数

参数名类型说明
raw[]byte原始 HTTP 请求报文字节数组

返回值

序号类型说明
reqInst*http.Request解析得到的 HTTP 请求对象
errerror错误信息,解析失败时返回非空

示例

req, err := str.ParseBytesToHTTPRequest(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")

ParseBytesToHTTPResponse

ParseBytesToHTTPResponse(res []byte) (rspInst *http.Response, err error)

将字节数组解析为 HTTP 响应

参数

参数名类型说明
res[]byte原始 HTTP 响应报文字节数组

返回值

序号类型说明
rspInst*http.Response解析得到的 HTTP 响应对象
errerror错误信息,解析失败时返回非空

示例

res, err := str.ParseBytesToHTTPResponse(b"HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nok")

ParseMultiPartFormWithCallback

ParseMultiPartFormWithCallback(req []byte, callback func(part *multipart.Part)) (err error)

是一个辅助函数,用于尝试解析请求报文体中的表单并进行回调

参数

参数名类型说明
req[]byte原始 HTTP 请求报文字节数组
callbackfunc(part *multipart.Part)表单分块回调函数,参数为每个 multipart.Part

返回值

序号类型说明
errerror错误信息,解析失败时返回非空

示例

poc.ParseMultiPartFormWithCallback(`POST /post HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Host: pie.dev

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="a"

1
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="b"

2
------WebKitFormBoundary7MA4YWxkTrZu0gW--`, func(part) {
content = string(io.ReadAll(part)~)
println(part.FileName(), part.FormName(), content)
})

ParseUrlToHTTPRequestRaw

ParseUrlToHTTPRequestRaw(method string, i any) (isHttps bool, req []byte, err error)

将URL解析为原始 HTTP 请求报文,返回是否为 HTTPS,原始请求报文与错误

参数

参数名类型说明
methodstring请求方法,如 GET、POST
iany目标 URL,可为字符串或可转换为字符串的对象

返回值

序号类型说明
isHttpsbool是否为 HTTPS
req[]byte原始 HTTP 请求报文字节数组
errerror错误信息,解析失败时返回非空

示例

ishttps, raw, err = poc.ParseUrlToHTTPRequestRaw("GET", "https://yaklang.com")

RemoveSession

RemoveSession(session string)

清除指定的 session,删除其关联的 cookiejar

这在完成一系列请求后清理资源时很有用

参数

参数名类型说明
sessionstring要清除的 session 标识符

示例

// 关键词: poc.RemoveSession, 按 session 名清理本地 cookiejar
// RemoveSession 只清理本地 session 缓存(cookiejar), 不发起任何网络请求, 可本地验证
poc.RemoveSession("user1") // 清除名为 user1 的 session, 释放其 cookiejar
println("session user1 removed") // 预期输出: session user1 removed
// 真实场景: 先用 poc.Get(url, poc.session("user1")) 登录并积累 cookie, 用完后再 RemoveSession 释放

ReplaceAllHTTPPacketPostParams

ReplaceAllHTTPPacketPostParams(packet []byte, values map[string]string) []byte

是一个辅助函数,用于改变请求报文,修改所有 POST 请求参数,如果不存在则会增加,其接收一个 map[string]string 类型的参数,其中 key 为 POST 请求参数名,value 为 POST 请求参数值

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
valuesmap[string]stringPOST 请求参数键值对表,会替换所有 POST 参数

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

_, raw, _ = poc.ParseUrlToHTTPRequestRaw("POST", "https://pie.dev/post")
poc.ReplaceAllHTTPPacketPostParams(raw, {"a":"b", "c":"d"}) // 添加POST请求参数a,值为b,POST请求参数c,值为d

ReplaceAllHTTPPacketPostParamsWithoutEscape

ReplaceAllHTTPPacketPostParamsWithoutEscape(packet []byte, values map[string]string) []byte

是一个辅助函数,用于改变请求报文,修改所有 POST 请求参数,如果不存在则会增加,其接收一个 map[string]string 类型的参数,其中 key 为 POST 请求参数名,value 为 POST 请求参数值

与 poc.ReplaceAllHTTPPacketPostParams 类似,但是不会将参数值进行转义

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
valuesmap[string]stringPOST 请求参数键值对表(值不做 URL 转义)

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

_, raw, _ = poc.ParseUrlToHTTPRequestRaw("POST", "https://pie.dev/post")
poc.ReplaceAllHTTPPacketPostParamsWithoutEscape(raw, {"a":"b", "c":"d"}) // 添加POST请求参数a,值为b,POST请求参数c,值为d

ReplaceAllHTTPPacketQueryParams

ReplaceAllHTTPPacketQueryParams(packet []byte, values map[string]string) []byte

是一个辅助函数,用于改变请求报文,修改所有 GET 请求参数,如果不存在则会增加,其接收一个 map[string]string 类型的参数,其中 key 为请求参数名,value 为请求参数值

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
valuesmap[string]stringGET 请求参数键值对表,会替换所有 GET 参数

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

poc.ReplaceAllHTTPPacketQueryParams(poc.BasicRequest(), {"a":"b", "c":"d"}) // 添加GET请求参数a,值为b,添加GET请求参数c,值为d

ReplaceAllHTTPPacketQueryParamsWithoutEscape

ReplaceAllHTTPPacketQueryParamsWithoutEscape(packet []byte, values map[string]string) []byte

是一个辅助函数,用于改变请求报文,修改所有 GET 请求参数,如果不存在则会增加,其接收一个 map[string]string 类型的参数,其中 key 为请求参数名,value 为请求参数值

与 poc.ReplaceAllHTTPPacketQueryParams 类似,但是不会将参数值进行转义

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
valuesmap[string]stringGET 请求参数键值对表(值不做 URL 转义)

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

poc.ReplaceAllHTTPPacketQueryParamsWithoutEscape(poc.BasicRequest(), {"a":"b", "c":"d"}) // 添加GET请求参数a,值为b,添加GET请求参数c,值为d

ReplaceBody

ReplaceBody(raw []byte, body []byte, chunk bool) (newHTTPRequest []byte)

将原始 HTTP 请求报文中的 body 替换为指定的 body,并指定是否为 chunked,返回新的 HTTP 请求报文

参数

参数名类型说明
raw[]byte原始 HTTP 报文字节数组
body[]byte替换后的报文主体内容
chunkbool是否使用 chunked 传输编码

返回值

序号类型说明
newHTTPRequest[]byte修改后的 HTTP 报文字节数组

示例

poc.ReplaceBody(`POST / HTTP/1.1
Host: example.com
Content-Length: 11

hello world`, "hello yak", false)

ReplaceHTTPPacketBasicAuth

ReplaceHTTPPacketBasicAuth(packet []byte, username string, password string) []byte

是一个辅助函数,用于改变请求报文,修改Authorization请求头为基础认证的密文,如果不存在则会增加,实际上是ReplaceHTTPPacketHeader("Authorization", codec.EncodeBase64(username + ":" + password))的简写

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
usernamestring基础认证用户名
passwordstring基础认证密码

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

_, raw, _ = poc.ParseUrlToHTTPRequestRaw("GET", "https://pie.dev/basic-auth/admin/password")
poc.ReplaceHTTPPacketBasicAuth(raw, "admin", "password") // 修改Authorization请求头

ReplaceHTTPPacketBody

ReplaceHTTPPacketBody(packet []byte, body []byte) []byte

是一个辅助函数,用于改变 HTTP 报文,修改 HTTP 报文主体内容,第一个参数为原始 HTTP 报文,第二个参数为修改的报文主体内容

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组
body[]byte修改后的报文主体内容

返回值

序号类型说明
r1[]byte修改后的 HTTP 报文字节数组

示例:示例:替换报文 body 并自动修正 Content-Length

// 关键词: poc.ReplaceHTTPPacketBody, 替换请求体, 自动修正长度
packet = poc.ReplaceHTTPPacketMethod(poc.BasicRequest(), "POST") // 先改成 POST
modified = poc.ReplaceHTTPPacketBody(packet, "a=b&c=d") // 替换 body, Content-Length 会自动修正
println(string(modified)) // 打印查看完整报文
assert string(poc.GetHTTPPacketBody(modified)) == "a=b&c=d", "body should be replaced"

ReplaceHTTPPacketCookie

ReplaceHTTPPacketCookie(packet []byte, key string, value any) []byte

是一个辅助函数,用于改变请求报文,修改Cookie请求头中的值,如果不存在则会增加

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组
keystringCookie 名称
valueanyCookie 的值

返回值

序号类型说明
r1[]byte修改后的 HTTP 报文字节数组

示例

poc.ReplaceHTTPPacketCookie(poc.BasicRequest(), "aaa", "bbb") // 修改cookie值,由于这里没有aaa的cookie值,所以会增加

ReplaceHTTPPacketCookies

ReplaceHTTPPacketCookies(packet []byte, m any) []byte

是一个辅助函数,用于改变请求报文,修改Cookie请求头

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组
manyCookie 键值对表

返回值

序号类型说明
r1[]byte修改后的 HTTP 报文字节数组

示例

poc.ReplaceHTTPPacketCookies(poc.BasicRequest(), {"aaa":"bbb", "ccc":"ddd"}) // 修改cookie值为aaa=bbb;ccc=ddd

ReplaceHTTPPacketFirstLine

ReplaceHTTPPacketFirstLine(packet []byte, firstLine string) []byte

是一个辅助,用于改变请求报文,修改第一行(即请求方法,请求路径,协议版本)

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
firstLinestring新的请求行,如 "GET /test HTTP/1.1"

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

poc.ReplaceHTTPPacketFirstLine(`GET / HTTP/1.1
Host: Example.com
`, "GET /test HTTP/1.1") // 向 example.com 发起请求,修改请求报文的第一行,请求/test路径

ReplaceHTTPPacketFormEncoded

ReplaceHTTPPacketFormEncoded(packet []byte, key string, value string) []byte

是一个辅助函数,用于改变请求报文,替换请求体中的表单,如果不存在则会增加

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
keystring表单字段名
valuestring表单字段值

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

poc.ReplaceHTTPPacketFormEncoded(`POST /post HTTP/1.1
Host: pie.dev
Content-Type: multipart/form-data; boundary=------------------------OFHnlKtUimimGcXvRSxgCZlIMAyDkuqsxeppbIFm
Content-Length: 203

--------------------------OFHnlKtUimimGcXvRSxgCZlIMAyDkuqsxeppbIFm
Content-Disposition: form-data; name="aaa"

bbb
--------------------------OFHnlKtUimimGcXvRSxgCZlIMAyDkuqsxeppbIFm--`, "ccc", "ddd") // 替换POST请求表单,其中ccc为键,ddd为值

ReplaceHTTPPacketHeader

ReplaceHTTPPacketHeader(packet []byte, headerKey string, headerValue any) []byte

是一个辅助函数,用于改变请求报文,修改请求头,如果不存在则会增加。 默认情况下(ignoreCase=true)会忽略大小写匹配,若需要严格匹配可使用 ReplaceHTTPPacketHeaderStrict。

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组
headerKeystring请求头名称
headerValueany请求头的值

返回值

序号类型说明
r1[]byte修改后的 HTTP 报文字节数组

示例:示例:修改请求头(不存在则新增)

// 关键词: poc.ReplaceHTTPPacketHeader, 修改/新增请求头
packet = poc.BasicRequest() // 一个基础 GET 请求模板
modified = poc.ReplaceHTTPPacketHeader(packet, "User-Agent", "yak/1.0") // 不存在则新增,忽略大小写
println(string(modified)) // 可直接打印整段报文,肉眼确认 User-Agent 已写入
assert poc.GetHTTPPacketHeader(modified, "User-Agent") == "yak/1.0", "header should be set"
// poc.ReplaceHTTPPacketHeaderStrict(packet, "AAA", "BBB") // 严格区分大小写的版本

ReplaceHTTPPacketHost

ReplaceHTTPPacketHost(packet []byte, host string) []byte

是一个辅助函数,用于改变请求报文,修改Host请求头,如果不存在则会增加,实际上是ReplaceHTTPPacketHeader("Host", host)的简写

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
hoststring新的 Host 请求头的值

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

_, raw, _ = poc.ParseUrlToHTTPRequestRaw("GET", "https://yaklang.com")
poc.ReplaceHTTPPacketHost(raw, "www.yaklang.com") // 修改Host请求头的值为 www.yaklang.com

ReplaceHTTPPacketJsonBody

ReplaceHTTPPacketJsonBody(packet []byte, jsonMap map[string]any) []byte

是一个辅助函数,用于改变 HTTP 报文,修改 HTTP 报文主体内容( json 格式),第一个参数为原始 HTTP 报文,第二个参数为修改的报文主体内容( map 对象)

参数

参数名类型说明
packet[]byte原始 HTTP 报文字节数组
jsonMapmap[string]any修改后的报文主体内容( map 对象,会被序列化为 JSON)

返回值

序号类型说明
r1[]byte修改后的 HTTP 报文字节数组

示例

poc.ReplaceHTTPPacketJsonBody(poc.BasicRequest(), {"a":"b"}) // 修改请求体内容为{"a":"b"}

ReplaceHTTPPacketMethod

ReplaceHTTPPacketMethod(packet []byte, newMethod string) []byte

是一个辅助函数,用于改变请求报文,修改请求方法

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
newMethodstring新的请求方法,如 GET、POST

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

poc.ReplaceHTTPPacketMethod(poc.BasicRequest(), "OPTIONS") // 修改请求方法为OPTIONS

ReplaceHTTPPacketPath

ReplaceHTTPPacketPath(packet []byte, p string) []byte

是一个辅助函数,用于改变请求报文,修改请求路径

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
pstring新的请求路径

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

poc.ReplaceHTTPPacketPath(poc.BasicRequest(), "/get") // 修改请求路径为/get

ReplaceHTTPPacketPathFunc

ReplaceHTTPPacketPathFunc(packet []byte, callback func(originPath string) string) []byte

是一个辅助函数,使用回调改变请求报文中的请求路径

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
callbackfunc(originPath string) string路径处理回调函数,参数为原路径,返回新路径

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

raw = poc.ReplaceHTTPPacketPathFunc(poc.BasicRequest(), func(p) { return "/get" })
dump(raw)

ReplaceHTTPPacketPostParam

ReplaceHTTPPacketPostParam(packet []byte, key string, value string) []byte

是一个辅助函数,用于改变请求报文,修改POST请求参数,如果不存在则会增加

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
keystringPOST 请求参数名
valuestringPOST 请求参数值

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

_, raw, _ = poc.ParseUrlToHTTPRequestRaw("POST", "https://pie.dev/post")
poc.ReplaceHTTPPacketPostParam(raw, "a", "b") // 添加POST请求参数a,值为b

ReplaceHTTPPacketQueryParam

ReplaceHTTPPacketQueryParam(packet []byte, key string, value string) []byte

是一个辅助函数,用于改变请求报文,修改GET请求参数,如果不存在则会增加

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
keystringGET 请求参数名
valuestringGET 请求参数值

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

_, raw, _ = poc.ParseUrlToHTTPRequestRaw("GET", "https://pie.dev/get")
poc.ReplaceHTTPPacketQueryParam(raw, "a", "b") // 添加GET请求参数a,值为b

ReplaceHTTPPacketQueryParamWithoutEscape

ReplaceHTTPPacketQueryParamWithoutEscape(packet []byte, key string, value string) []byte

是一个辅助函数,用于改变请求报文,修改所有 GET 请求参数,如果不存在则会增加,其接收一个 map[string]string 类型的参数,其中 key 为请求参数名,value 为请求参数值 与 poc.ReplaceHTTPPacketQueryParam 类似,但是不会将参数值进行转义

参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
keystringGET 请求参数名
valuestringGET 请求参数值(不做 URL 转义)

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例:示例:设置单个 GET 参数且不做 URL 转义

// 关键词: poc.ReplaceHTTPPacketQueryParamWithoutEscape, GET参数不转义
packet = poc.BasicRequest()
modified = poc.ReplaceHTTPPacketQueryParamWithoutEscape(packet, "a", "b c") // 值原样写入, 不会把空格转成 %20
println(string(modified)) // first line 出现 ?a=b c
assert string(modified).Contains("a=b c"), "value should not be escaped"

可变参数函数详情

AppendHTTPPacketUploadFile

AppendHTTPPacketUploadFile(packet []byte, fieldName string, fileName string, fileContent any, contentType ...string) []byte

是一个辅助函数,用于改变请求报文,添加请求体中的上传的文件,其中第一个参数为原始请求报文,第二个参数为表单名,第三个参数为文件名,第四个参数为文件内容,第五个参数是可选参数,为文件类型(Content-Type)

必填参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
fieldNamestring表单字段名
fileNamestring文件名
fileContentany文件内容

可选参数

参数名类型说明
contentType...string可选,文件类型(Content-Type)

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

_, raw, _ = poc.ParseUrlToHTTPRequestRaw("POST", "https://pie.dev/post")
poc.AppendHTTPPacketUploadFile(raw, "file", "phpinfo.php", "<?php phpinfo(); ?>", "image/jpeg") // 添加POST请求表单,其文件名为phpinfo.php,内容为<?php phpinfo(); ?>,文件类型为image/jpeg

BuildRequest

BuildRequest(i any, opts ...PocConfigOption) []byte

是一个用于辅助构建请求报文的工具函数,它第一个参数可以接收 []byte, string, http.Request 结构体,接下来可以接收零个到多个请求选项,修改请求报文的选项将被作用,最后返回构建好的请求报文

必填参数

参数名类型说明
iany请求源,可为原始报文 []byte/string 或 *http.Request

可选参数

可作为可变参数 opts ...PocConfigOption 传入选项;共 104 个可用选项,详见 PocConfigOption 选项列表

返回值

序号类型说明
r1[]byte构建好的请求报文字节数组

示例:示例:用选项链在本地构建请求报文(不发包, 可本地验证)

// 关键词: poc.BuildRequest, 本地构建报文, 选项链
// BuildRequest 只应用"修改请求报文"的选项并返回报文, 不会真正发请求, 适合本地拼包/调试。
raw = poc.BuildRequest(
poc.BasicRequest(), // 基础 GET 模板
poc.replaceHost("yaklang.com"), // 改 Host
poc.replacePath("/docs/api/poc"), // 改路径
poc.replaceMethod("POST"), // 改方法
poc.replaceBody("a=b", false), // 改 body(第二个参数表示是否分块传输)
)
println(string(raw)) // 打印拼好的完整请求报文
assert string(raw).Contains("POST /docs/api/poc"), "first line should be rebuilt"
assert poc.GetHTTPPacketHeader(raw, "Host") == "yaklang.com", "host should be replaced"

Delete

Delete(urlStr string, opts ...PocConfigOption) (rspInst *lowhttp.LowhttpResponse, reqInst *http.Request, err error)

向指定 URL 发送 DELETE 请求并且返回响应结构体,请求结构体以及错误,它的第一个参数是 URL 字符串,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如对设置超时时间,或者修改请求报文等

关于结构体中的可用字段和方法可以使用 desc 函数进行查看

必填参数

参数名类型说明
urlStrstring目标 URL 字符串

可选参数

可作为可变参数 opts ...PocConfigOption 传入选项;共 104 个可用选项,详见 PocConfigOption 选项列表

返回值

序号类型说明
rspInst*lowhttp.LowhttpResponse响应结构体 LowhttpResponse
reqInst*http.Request请求结构体 *http.Request
errerror错误信息,请求失败时返回非空

示例

// 无法本地验证: 需要可达的真实 HTTPS 目标
rsp,req = poc.Delete("https://yaklang.com", poc.https(true))~ // 向yaklang.com发送一个基于HTTPS协议的DELETE请求
desc(rsp) // 查看响应结构体中的可用字段

Do

Do(method string, urlStr string, opts ...PocConfigOption) (rspInst *lowhttp.LowhttpResponse, reqInst *http.Request, err error)

向指定 URL 发送指定请求方法的请求并且返回响应结构体,请求结构体以及错误,它的是第一个参数是请求方法,第二个参数 URL 字符串,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如设置超时时间,或者修改请求报文等 关于结构体中的可用字段和方法可以使用 desc 函数进行查看

必填参数

参数名类型说明
methodstring请求方法,如 GET、POST
urlStrstring目标 URL 字符串

可选参数

可作为可变参数 opts ...PocConfigOption 传入选项;共 104 个可用选项,详见 PocConfigOption 选项列表

返回值

序号类型说明
rspInst*lowhttp.LowhttpResponse响应结构体 LowhttpResponse
reqInst*http.Request请求结构体 *http.Request
errerror错误信息,请求失败时返回非空

示例:向本地 mock 服务发送指定方法请求(可本地验证, 不出网)

host, port = tcp.MockServe(b"HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nok") // 起本地 mock 服务
rsp, req = poc.Do("GET", f"http://${host}:${port}/")~
assert rsp.GetStatusCode() == 200, "should get 200 from local mock"

示例:向真实站点发送指定方法的 HTTPS 请求

// 无法本地验证: 需要可达的真实 HTTPS 目标
rsp, req = poc.Do("GET", "https://yaklang.com", poc.https(true))~ // 向 yaklang.com 发送 HTTPS GET 请求
desc(rsp) // 查看响应结构体中的可用字段

Download

Download(urlStr string, opts ...PocConfigOption) (string, error)

从指定 URL 下载文件并保存到本地,返回保存的文件路径和错误

支持进度回调、完成回调、自定义文件名和保存目录等选项

必填参数

参数名类型说明
urlStrstring目标文件的 URL 字符串

可选参数

可作为可变参数 opts ...PocConfigOption 传入选项;共 104 个可用选项,详见 PocConfigOption 选项列表

返回值

序号类型说明
r1string已保存文件的本地路径
r2error错误信息,下载失败时返回非空

示例

filename, err = poc.Download("https://example.com/file.zip")
filename, err = poc.Download("https://example.com/file.zip", poc.downloadProgress(func(downloaded, total, percent) {

println(sprintf("下载进度: %.2f%%", percent))

}), poc.downloadFilename("my_file.zip"))

DownloadWithMethod

DownloadWithMethod(method string, urlStr string, opts ...PocConfigOption) (string, error)

使用指定的 HTTP 方法从 URL 下载文件

必填参数

参数名类型说明
methodstringHTTP 请求方法,如 GET、POST
urlStrstring目标文件的 URL 字符串

可选参数

可作为可变参数 opts ...PocConfigOption 传入选项;共 104 个可用选项,详见 PocConfigOption 选项列表

返回值

序号类型说明
r1string已保存文件的本地路径
r2error错误信息,下载失败时返回非空

示例

filename, err = poc.DownloadWithMethod("POST", "https://example.com/download", poc.body("token=xxx"))

Get

Get(urlStr string, opts ...PocConfigOption) (rspInst *lowhttp.LowhttpResponse, reqInst *http.Request, err error)

向指定 URL 发送 GET 请求并且返回响应结构体,请求结构体以及错误,它的第一个参数是 URL 字符串,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如对设置超时时间,或者修改请求报文等 关于结构体中的可用字段和方法可以使用 desc 函数进行查看

必填参数

参数名类型说明
urlStrstring目标 URL 字符串

可选参数

可作为可变参数 opts ...PocConfigOption 传入选项;共 104 个可用选项,详见 PocConfigOption 选项列表

返回值

序号类型说明
rspInst*lowhttp.LowhttpResponse响应结构体 LowhttpResponse
reqInst*http.Request请求结构体 *http.Request
errerror错误信息,请求失败时返回非空

示例:向本地 mock 服务发送 GET 请求(可本地验证, 不出网)

host, port = tcp.MockServe(b"HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nok") // 起本地 mock 服务
rsp, req = poc.Get(f"http://${host}:${port}/")~
assert rsp.GetStatusCode() == 200, "should get 200 from local mock"

示例:向真实站点发送 HTTPS GET 请求

// 无法本地验证: 需要可达的真实 HTTPS 目标
rsp, req = poc.Get("https://yaklang.com", poc.https(true))~ // 向 yaklang.com 发送 HTTPS GET 请求
desc(rsp) // 查看响应结构体中的可用字段

HTTP

HTTP(i any, opts ...PocConfigOption) (rsp []byte, req []byte, err error)

发送请求并且返回原始响应报文,原始请求报文以及错误,它的第一个参数可以接收 []byte, string, http.Request 结构体,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如设置超时时间,或者修改请求报文等

必填参数

参数名类型说明
iany请求源,可为原始报文 []byte/string 或 *http.Request

可选参数

可作为可变参数 opts ...PocConfigOption 传入选项;共 104 个可用选项,详见 PocConfigOption 选项列表

返回值

序号类型说明
rsp[]byte原始响应报文字节数组
req[]byte原始请求报文字节数组
errerror错误信息,请求失败时返回非空

示例:向本地 mock 服务发送原始报文请求(可本地验证, 不出网)

host, port = tcp.MockServe(b"HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nok") // 起本地 mock 服务
rsp, req = poc.HTTP(f"GET / HTTP/1.1\r\nHost: ${host}:${port}\r\n\r\n")~
assert str.Contains(string(rsp), "200 OK"), "should receive mock response"

示例:向真实站点发送 HTTPS 请求并改写请求头

// 无法本地验证: 需要可达的真实 HTTPS 目标
// 向 yaklang.com 发送 HTTPS GET 请求, 并添加请求头 AAA: BBB
rsp, req = poc.HTTP("GET / HTTP/1.1\r\nHost: www.yaklang.com\r\n\r\n", poc.https(true), poc.replaceHeader("AAA", "BBB"))~

HTTPEx

HTTPEx(i any, opts ...PocConfigOption) (rspInst *lowhttp.LowhttpResponse, reqInst *http.Request, err error)

与 HTTP 类似,它发送请求并且返回响应结构体,请求结构体以及错误,它的第一个参数可以接收 []byte, string, http.Request 结构体,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如设置超时时间,或者修改请求报文等 关于结构体中的可用字段和方法可以使用 desc 函数进行查看

必填参数

参数名类型说明
iany请求源,可为原始报文 []byte/string 或 *http.Request

可选参数

可作为可变参数 opts ...PocConfigOption 传入选项;共 104 个可用选项,详见 PocConfigOption 选项列表

返回值

序号类型说明
rspInst*lowhttp.LowhttpResponse响应结构体 LowhttpResponse
reqInst*http.Request请求结构体 *http.Request
errerror错误信息,请求失败时返回非空

示例:向本地 mock 服务发送请求并读取响应结构体(可本地验证, 不出网)

host, port = tcp.MockServe(b"HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nok") // 起本地 mock 服务
rsp, req = poc.HTTPEx(f"GET / HTTP/1.1\r\nHost: ${host}:${port}\r\n\r\n")~
assert rsp.GetStatusCode() == 200, "should get 200 from local mock"

示例:向真实站点发送 HTTPS 请求并改写请求头

// 无法本地验证: 需要可达的真实 HTTPS 目标
rsp, req = poc.HTTPEx(`GET / HTTP/1.1\r\nHost: www.yaklang.com\r\n\r\n`, poc.https(true), poc.replaceHeader("AAA", "BBB"))~
desc(rsp) // 查看响应结构体中的可用字段

Head(urlStr string, opts ...PocConfigOption) (rspInst *lowhttp.LowhttpResponse, reqInst *http.Request, err error)

向指定 URL 发送 HEAD 请求并且返回响应结构体,请求结构体以及错误,它的第一个参数是 URL 字符串,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如对设置超时时间,或者修改请求报文等

关于结构体中的可用字段和方法可以使用 desc 函数进行查看

必填参数

参数名类型说明
urlStrstring目标 URL 字符串

可选参数

可作为可变参数 opts ...PocConfigOption 传入选项;共 104 个可用选项,详见 PocConfigOption 选项列表

返回值

序号类型说明
rspInst*lowhttp.LowhttpResponse响应结构体 LowhttpResponse
reqInst*http.Request请求结构体 *http.Request
errerror错误信息,请求失败时返回非空

示例

// 无法本地验证: 需要可达的真实 HTTPS 目标
rsp,req = poc.Head("https://yaklang.com", poc.https(true))~ // 向yaklang.com发送一个基于HTTPS协议的HEAD请求
desc(rsp) // 查看响应结构体中的可用字段

Options

Options(urlStr string, opts ...PocConfigOption) (rspInst *lowhttp.LowhttpResponse, reqInst *http.Request, err error)

向指定 URL 发送 OPTIONS 请求并且返回响应结构体,请求结构体以及错误,它的第一个参数是 URL 字符串,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如对设置超时时间,或者修改请求报文等

关于结构体中的可用字段和方法可以使用 desc 函数进行查看

必填参数

参数名类型说明
urlStrstring目标 URL 字符串

可选参数

可作为可变参数 opts ...PocConfigOption 传入选项;共 104 个可用选项,详见 PocConfigOption 选项列表

返回值

序号类型说明
rspInst*lowhttp.LowhttpResponse响应结构体 LowhttpResponse
reqInst*http.Request请求结构体 *http.Request
errerror错误信息,请求失败时返回非空

示例

// 无法本地验证: 需要可达的真实 HTTPS 目标
rsp,req = poc.Options("https://yaklang.com", poc.https(true))~ // 向yaklang.com发送一个基于HTTPS协议的Options请求
desc(rsp) // 查看响应结构体中的可用字段

Post

Post(urlStr string, opts ...PocConfigOption) (rspInst *lowhttp.LowhttpResponse, reqInst *http.Request, err error)

向指定 URL 发送 POST 请求并且返回响应结构体,请求结构体以及错误,它的第一个参数是 URL 字符串,接下来可以接收零个到多个请求选项,用于对此次请求进行配置,例如对设置超时时间,或者修改请求报文等 关于结构体中的可用字段和方法可以使用 desc 函数进行查看

必填参数

参数名类型说明
urlStrstring目标 URL 字符串

可选参数

可作为可变参数 opts ...PocConfigOption 传入选项;共 104 个可用选项,详见 PocConfigOption 选项列表

返回值

序号类型说明
rspInst*lowhttp.LowhttpResponse响应结构体 LowhttpResponse
reqInst*http.Request请求结构体 *http.Request
errerror错误信息,请求失败时返回非空

示例:向本地 mock 服务发送 POST 请求(可本地验证, 不出网)

host, port = tcp.MockServe(b"HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nok") // 起本地 mock 服务
rsp, req = poc.Post(f"http://${host}:${port}/login", poc.body("user=admin&pass=123"))~
assert rsp.GetStatusCode() == 200, "should get 200 from local mock"

示例:向真实站点发送 HTTPS POST 请求

// 无法本地验证: 需要可达的真实 HTTPS 目标
rsp, req = poc.Post("https://yaklang.com", poc.https(true))~ // 向 yaklang.com 发送 HTTPS POST 请求
desc(rsp) // 查看响应结构体中的可用字段

ReplaceHTTPPacketUploadFile

ReplaceHTTPPacketUploadFile(packet []byte, fieldName string, fileName string, fileContent any, contentType ...string) []byte

是一个辅助函数,用于改变请求报文,替换请求体中的上传的文件,其中第一个参数为原始请求报文,第二个参数为表单名,第三个参数为文件名,第四个参数为文件内容,第五个参数是可选参数,为文件类型(Content-Type),如果表单名不存在则会增加

必填参数

参数名类型说明
packet[]byte原始 HTTP 请求报文字节数组
fieldNamestring表单字段名
fileNamestring文件名
fileContentany文件内容

可选参数

参数名类型说明
contentType...string可选,文件类型(Content-Type)

返回值

序号类型说明
r1[]byte修改后的 HTTP 请求报文字节数组

示例

_, raw, _ = poc.ParseUrlToHTTPRequestRaw("POST", "https://pie.dev/post")
poc.ReplaceHTTPPacketUploadFile(raw, "file", "phpinfo.php", "<?php phpinfo(); ?>", "image/jpeg") // 添加POST请求表单,其文件名为phpinfo.php,内容为<?php phpinfo(); ?>,文件类型为image/jpeg

Split

Split(raw []byte, hook ...func(line string)) (headers string, body []byte)

切割 HTTP 报文,返回响应头和响应体,其第一个参数是原始HTTP报文,接下来可以接收零个到多个回调函数,其在每次解析到请求头时回调

必填参数

参数名类型说明
raw[]byte原始 HTTP 报文字节数组

可选参数

参数名类型说明
hook...func(line string)可选的回调函数,每解析到一行请求头时回调

返回值

序号类型说明
headersstring报文头部字符串
body[]byte报文体字节数组

示例:示例:把报文切成 header 和 body 两部分

// 关键词: poc.Split, 切分报文头与体
packet = `POST / HTTP/1.1
Content-Type: application/json
Host: www.example.com

{"key": "value"}`
header, body = poc.Split(packet) // 第一个返回值是头部字符串, 第二个是 body 字节
println("--- header ---")
println(header)
println("--- body ---")
println(string(body)) // 预期输出: {"key": "value"}
assert string(body) == `{"key": "value"}`, "body should be split out correctly"
assert header.Contains("Content-Type: application/json"), "header should contain content-type"

Websocket

Websocket(raw any, opts ...PocConfigOption) (rsp []byte, req []byte, err error)

实际上等价于poc.HTTP(..., poc.websocket(true)),用于快速发送请求并建立websocket连接并且返回原始响应报文,原始请求报文以及错误

必填参数

参数名类型说明
rawanywebsocket 握手请求源,可为原始报文 []byte/string 或 *http.Request

可选参数

可作为可变参数 opts ...PocConfigOption 传入选项;共 104 个可用选项,详见 PocConfigOption 选项列表

返回值

序号类型说明
rsp[]byte原始响应报文字节数组
req[]byte原始请求报文字节数组
errerror错误信息,请求失败时返回非空

示例

// 无法本地验证: 需要可达的真实 websocket 服务与本地代理
rsp, req, err = poc.Websocket(`GET / HTTP/1.1
Connection: Upgrade
Upgrade: websocket
Sec-Websocket-Version: 13
Sec-Websocket-Extensions: permessage-deflate; client_max_window_bits
Host: echo.websocket.events
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-US;q=0.7
Sec-Websocket-Key: L31R1As+71fwuXqhwhABuA==`,

poc.proxy("http://127.0.0.1:7890"), poc.websocketFromServer(func(rsp, cancel) {
dump(rsp)
}), poc.websocketOnClient(func(c) {
c.WriteText("123")
})

)
time.Sleep(100)

可变参数选项列表

以下按选项类型汇总全部可变参数选项(原先重复在各主函数下的选项表已收拢到此处):

1. 类型:PocConfigOption

涉及到的函数有:poc.BuildRequestpoc.Deletepoc.Dopoc.Downloadpoc.DownloadWithMethodpoc.Getpoc.HTTPpoc.HTTPExpoc.Headpoc.Optionspoc.Postpoc.Websocket

选项函数参数返回值说明
poc.afterSaveHandlerf ...func(flow *schema.HTTPFlow)PocConfigOption是一个请求选项参数,用于设置在此次请求记录保存到数据库之后的回调函数
poc.appendCookiekey string, value stringPocConfigOption是一个请求选项参数,用于改变请求报文,添加 Cookie 请求头中的值
poc.appendFormEncodedkey string, value stringPocConfigOption是一个请求选项参数,用于改变请求报文,添加请求体中的表单
poc.appendHeaderkey string, value stringPocConfigOption是一个请求选项参数,用于改变请求报文,添加请求头
poc.appendHeadersheaders map[string]stringPocConfigOption是一个请求选项参数,用于改变请求报文,添加请求头
poc.appendPathpath stringPocConfigOption是一个请求选项参数,用于改变请求报文,在现有请求路径后添加请求路径
poc.appendPostParamkey string, value stringPocConfigOption是一个请求选项参数,用于改变请求报文,添加 POST 请求参数
poc.appendQueryParamkey string, value stringPocConfigOption是一个请求选项参数,用于改变请求报文,添加 GET 请求参数
poc.appendUploadFilefieldName string, fileName string, fileContent any, contentType ...stringPocConfigOption是一个请求选项参数,用于改变请求报文,添加请求体中的上传的文件,其中第一个参数为表单名,第二个参数为文件名,第三个参数为文件内容,第四个参数是可选参数,为文件类型(Content-Type)
poc.bodyi anyPocConfigOption是一个请求选项参数,用于指定请求的 body,需要传入一个任意类型的参数,如果不是 string 或者 bytes 会抛出日志并忽略。
poc.bodyStreamHandleri func(r []byte, closer io.ReadCloser)PocConfigOption是一个请求选项参数,可以设置一个回调函数,如果 body 读取了,将会复制一份给这个流,在这个流中处理 body 是不会影响最终结果的,一般用于处理较长的 chunk 数据
poc.connPoolb boolPocConfigOption是一个请求选项参数,用于指定是否使用连接池,默认不使用连接池
poc.connectTimeoutf float64PocConfigOption是一个请求选项参数,用于指定连接超时时间,默认为15秒
poc.contextctx context.ContextPocConfigOption是一个请求选项参数,用于指定请求的上下文
poc.cookiec string, values ...anyPocConfigOption是一个请求选项参数,用于改变请求报文,添加 Cookie 请求头中的值
poc.deleteCookiekey stringPocConfigOption是一个请求选项参数,用于改变请求报文,删除 Cookie 中的值
poc.deleteFormkey stringPocConfigOption是一个请求选项参数,用于改变请求报文,删除 POST 请求表单
poc.deleteHeaderkey stringPocConfigOption是一个请求选项参数,用于改变请求报文,删除请求头
poc.deletePostParamkey stringPocConfigOption是一个请求选项参数,用于改变请求报文,删除 POST 请求参数
poc.deleteQueryParamkey stringPocConfigOption是一个请求选项参数,用于改变请求报文,删除 GET 请求参数
poc.disableSessionb boolPocConfigOption为 true 时不自动分配 session,也不启用 cookie jar(适合无需 cookie 的探测请求)
poc.dnsNoCacheb boolPocConfigOption是一个请求选项参数,用于指定请求时不使用DNS缓存,默认使用DNS缓存
poc.dnsServerservers ...stringPocConfigOption是一个请求选项参数,用于指定请求所使用的DNS服务器,默认使用系统自带的DNS服务器
poc.downloadDirdir stringPocConfigOption是一个下载选项参数,用于指定文件保存目录
poc.downloadFilenamefilename stringPocConfigOption是一个下载选项参数,用于手动指定保存的文件名
poc.downloadFinishedcallback func(filePath string)PocConfigOption是一个下载选项参数,用于设置下载完成回调函数
poc.downloadProgresscallback func(downloaded int64, total int64, percent float64)PocConfigOption是一个下载选项参数,用于设置下载进度回调函数
poc.fakeua-PocConfigOptionreplaceRandomUserAgent 是一个请求选项参数,用于改变请求报文,修改 User-Agent 请求头为随机的常见请求头
poc.fixQueryEscapeb boolPocConfigOption是一个请求选项参数,用于指定是否修复查询参数中的 URL 编码,默认为 false 即会自动修复URL编码
poc.fromPluginb stringPocConfigOption是一个请求选项参数,用于标记此次请求来源于哪个插件,便于请求记录的归类与溯源
poc.gmTLSCipherSuitesuites ...intPocConfigOptionWithGmTLSCipherSuite 指定国密 TLS 套件,使用 tls.GMTLS_* 常量(可传多个)。
poc.gmTLSDisableCompatModedisable ...boolPocConfigOptionWithGmTLSDisableCompatMode 关闭国密兼容模式;不传参等价于 true(仅单次四套)。
poc.gmTLSPrefer-PocConfigOption是一个请求选项参数,用于在兼容模式下优先尝试国密 TLS(GMTLS)
poc.gmTls-PocConfigOption是一个请求选项参数,用于启用国密 TLS(GMTLS),默认兼容模式同时尝试标准 TLS 与国密 TLS
poc.gmTlsOnly-PocConfigOption是一个请求选项参数,用于仅使用国密 TLS(GMTLS),不再回退到标准 TLS
poc.headerkey string, value stringPocConfigOptionappendHeader 是一个请求选项参数,用于改变请求报文,添加请求头
poc.hosth stringPocConfigOption是一个请求选项参数,用于指定实际请求的 host,如果没有设置该请求选项,则会依据原始请求报文中的Host字段来确定实际请求的host
poc.http2isHttp2 boolPocConfigOption是一个请求选项参数,用于指定是否使用 http2 协议,默认为 false 即使用http1协议
poc.httpsisHttps boolPocConfigOption是一个请求选项参数,用于指定是否使用 https 协议,默认为 false 即使用 http 协议
poc.jsRedirectb boolPocConfigOption是一个请求选项参数,用于指定是否跟踪JS重定向,默认为false即不会自动跟踪JS重定向
poc.jsoni anyPocConfigOption是一个请求选项参数,用于指定请求的 body 为 json 格式,需要传入一个任意类型的参数,会自动转换为 json 格式
poc.noBodyBufferb boolPocConfigOption是一个请求选项参数,用于指定是否禁用响应体缓冲,设置为 true 时可以避免大文件下载时的内存占用
poc.noFixContentLengthb boolPocConfigOption是一个请求选项参数,用于指定是否修复响应报文中的 Content-Length 字段,默认为 false 即会自动修复Content-Length字段
poc.noRedirectb boolPocConfigOption是一个请求选项参数,用于指定是否跟踪重定向,默认为 false 即会自动跟踪重定向
poc.noredirectb boolPocConfigOption是一个请求选项参数,用于指定是否跟踪重定向,默认为 false 即会自动跟踪重定向
poc.paramsi anyPocConfigOption是一个请求选项参数,用于在请求时使用传入的值,需要注意的是,它可以很方便地使用 str.f()或 f-string 代替
poc.passwordpassword stringPocConfigOption是一个请求选项参数,用于指定认证时的密码
poc.portport intPocConfigOption是一个请求选项参数,用于指定实际请求的端口,如果没有设置该请求选项,则会依据原始请求报文中的Host字段来确定实际请求的端口
poc.postDatai stringPocConfigOption是一个请求选项参数,用于指定请求的 body 为 post 数据,需要传入一个任意类型的参数,会自动转换为 post 数据
poc.postParamsi anyPocConfigOption是一个请求选项参数,用于指定请求的 body 为 post 数据,需要传入一个任意类型的参数,会自动转换为 post 数据
poc.postparamsi anyPocConfigOption是一个请求选项参数,用于指定请求的 body 为 post 数据,需要传入一个任意类型的参数,会自动转换为 post 数据
poc.proxyproxies ...stringPocConfigOption是一个请求选项参数,用于指定请求使用的代理,可以指定多个代理,默认会使用系统代理
poc.queryi anyPocConfigOption是一个请求选项参数,用于指定请求的 query 参数,需要传入一个任意类型的参数,会自动转换为 query 参数
poc.randomChunkedb boolPocConfigOption是一个请求选项参数,用于启用随机分块传输,默认不启用
poc.randomChunkedDelaymin int, max intPocConfigOptionrandomChunkedDelay是一个请求选项参数,用于设置随机分块传输的分块延迟范围,默认最小延迟为50毫秒,最大延迟为100毫秒
poc.randomChunkedLengthmin int, max intPocConfigOption是一个请求选项参数,用于设置随机分块传输的分块长度范围,默认最小长度为10,最大长度为25
poc.randomChunkedResultHandlerf func(id int, chunkRaw []byte, totalTime time.Duration, chunkSendTime time.Duration)PocConfigOption是一个请求选项参数,用于设置随机分块传输的结果处理函数
poc.randomJA3b boolPocConfigOption是一个请求选项参数,用于指定是否启用随机 JA3 指纹,默认为 false
poc.redirecti func(current *http.Request, vias []*http.Request) boolPocConfigOption是一个请求选项参数,用于设置旧风格的 redirectHandler 函数,如果设置了该选项,则会在重定向时调用该函数,如果该函数返回 true,则会继续重定向,否则不会重定向。其第一个参数为当前的请求,第二个参数为既往的多个请求
poc.redirectHandleri func(isHttps bool, req, rsp []byte) boolPocConfigOption是一个请求选项参数,用于作为重定向处理函数,如果设置了该选项,则会在重定向时调用该函数,如果该函数返回 true,则会继续重定向,否则不会重定向。其第一个参数为是否使用 https 协议,第二个参数为原始请求报文,第三个参数为原始响应报文
poc.redirectTimest intPocConfigOption是一个请求选项参数,用于指定最大重定向次数,默认为5次
poc.replaceAllHeadersheaders map[string]stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改修改所有请求头
poc.replaceAllPostParamsvalues map[string]stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改所有POST请求参数,如果不存在则会增加,其接收一个map[string]string类型的参数,其中key为POST请求参数名,value为POST请求参数值
poc.replaceAllPostParamsWithoutEscapevalues map[string]stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改所有POST请求参数,如果不存在则会增加,其接收一个map[string]string类型的参数,其中key为POST请求参数名,value为POST请求参数值
poc.replaceAllQueryParamsvalues map[string]stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改所有 GET 请求参数,如果不存在则会增加,其接收一个map[string]string 类型的参数,其中 key 为请求参数名,value 为请求参数值
poc.replaceAllQueryParamsWithoutEscapevalues map[string]stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改所有 GET 请求参数,如果不存在则会增加,其接收一个map[string]string 类型的参数,其中 key 为请求参数名,value 为请求参数值
poc.replaceBasicAuthusername string, password stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改 Authorization 请求头为基础认证的密文,如果不存在则会增加,实际上是replaceHeader("Authorization", codec.EncodeBase64(username + ":" + password))的简写
poc.replaceBodybody []byte, chunk boolPocConfigOption是一个请求选项参数,用于改变请求报文,修改请求体内容,第一个参数为修改后的请求体内容,第二个参数为是否分块传输
poc.replaceCookiekey string, value stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改Cookie请求头中的值,如果不存在则会增加
poc.replaceCookiescookies anyPocConfigOption是一个请求选项参数,用于改变请求报文,修改所有Cookie请求头中的值
poc.replaceFirstLinefirstLine stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改第一行(即请求方法,请求路径,协议版本)
poc.replaceFormEncodedkey string, value stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改请求体中的表单,如果不存在则会增加
poc.replaceHeaderkey string, value stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改修改请求头,如果不存在则会增加
poc.replaceHosthost stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改Host请求头,如果不存在则会增加,实际上是replaceHeader("Host", host)的简写
poc.replaceMethodmethod stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改请求方法
poc.replacePathpath stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改请求路径
poc.replacePathFunchandle func(string) stringPocConfigOption是一个请求选项参数,用于使用回调改变请求报文,修改请求路径
poc.replacePostParamkey string, value stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改 POST 请求参数,如果不存在则会增加
poc.replaceQueryParamkey string, value stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改 GET 请求参数,如果不存在则会增加
poc.replaceRandomUserAgent-PocConfigOption是一个请求选项参数,用于改变请求报文,修改 User-Agent 请求头为随机的常见请求头
poc.replaceUploadFileformName string, fileName string, fileContent []byte, contentType ...stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改请求体中的上传的文件,其中第一个参数为表单名,第二个参数为文件名,第三个参数为文件内容,第四个参数是可选参数,为文件类型(Content-Type),如果不存在则会增加
poc.replaceUserAgentua stringPocConfigOption是一个请求选项参数,用于改变请求报文,修改 User-Agent 请求头,实际上是replaceHeader("User-Agent", userAgent)的简写
poc.retryInStatusCodecodes ...intPocConfigOption是一个请求选项参数,用于指定在某些响应状态码的情况下重试,需要搭配 retryTimes 使用
poc.retryMaxWaitTimef float64PocConfigOption是一个请求选项参数,用于指定重试时最大等待时间,需要搭配 retryTimes 使用,默认为2秒
poc.retryNotInStatusCodecodes ...intPocConfigOption是一个请求选项参数,用于指定非某些响应状态码的情况下重试,需要搭配 retryTimes 使用
poc.retryTimest intPocConfigOption是一个请求选项参数,用于指定请求失败时的重试次数,需要搭配 retryInStatusCode 或 retryNotInStatusCode 使用,来设置在什么响应码的情况下重试
poc.retryWaitTimef float64PocConfigOption是一个请求选项参数,用于指定重试时最小等待时间,需要搭配 retryTimes 使用,默认为0.1秒
poc.runtimeIDr stringPocConfigOption是一个请求选项参数,用于为此次请求指定运行时 ID,便于关联与追踪请求记录
poc.saveb boolPocConfigOption是一个请求选项参数,用于指定是否将此次请求的记录保存在数据库中,默认为true即会保存到数据库
poc.saveHandlerf ...func(response *lowhttp.LowhttpResponse)PocConfigOption是一个请求选项参数,用于设置在将此次请求存入数据库之前的回调函数
poc.saveSyncb boolPocConfigOption是一个请求选项参数,用于指定是否将此次请求的记录保存在数据库中,且同步保存,默认为false即会异步保存到数据库
poc.sessionsession stringPocConfigOption是一个请求选项参数,用于指定请求的 session 标识(string),同一 session 共享 cookie jar,适合登录后连续请求
poc.snisni stringPocConfigOption是一个请求选项参数,用于指定使用 tls(https) 协议时的 服务器名称指示(SNI)
poc.sourcei stringPocConfigOption是一个请求选项参数,用于在请求记录保存到数据库时标识此次请求的来源
poc.timeoutf float64PocConfigOption是一个请求选项参数,用于指定读取超时时间,默认为15秒
poc.uaua stringPocConfigOption是一个请求选项参数,用于改变请求报文,添加 User-Agent 请求头中的值
poc.uarand-PocConfigOptionreplaceRandomUserAgent 是一个请求选项参数,用于改变请求报文,修改 User-Agent 请求头为随机的常见请求头
poc.useMitmRuleb boolPocConfigOption是一个请求选项参数,用于指定是否使用MITM规则,默认为false即不会使用MITM规则,使用规则可以完成流量染色,附加tag与提取数据的功能
poc.useragentua stringPocConfigOptionua 是一个请求选项参数,用于改变请求报文,添加 User-Agent 请求头中的值
poc.usernameusername stringPocConfigOption是一个请求选项参数,用于指定认证时的用户名
poc.websocketw boolPocConfigOption是一个请求选项参数,用于允许将链接升级为 websocket,此时发送的请求应该为 websocket 握手请求
poc.websocketFromServerw func(i []byte, cancel func())PocConfigOption是一个请求选项参数,它接收一个回调函数,这个函数有两个参数,其中第一个参数为服务端发送的数据,第二个参数为取消函数,调用将会强制断开 websocket
poc.websocketOnClientw func(c *lowhttp.WebsocketClient)PocConfigOption是一个请求选项参数,它接收一个回调函数,这个函数有一个参数,是WebsocketClient结构体,通过该结构体可以向服务端发送数据
poc.websocketStrictModeb boolPocConfigOption是一个请求选项参数,它用于控制是否启用严格模式,如果启用严格模式,则会遵循 RFC 6455 规范