# README
NATIVE-HTTP-CLIENT
通过 tcp 和 unix sock 文件发送原生HTTP请求的HTTP客户端
开发计划
- HTTP
- 302
- 公开 test api
- HTTPS
- TLS
- HTTP2
获取实例
连接到 TCP
client := NewTcp("domain")
连接到 Socket 文件
client := NewUnixSock("/var/run/docker.sock")
请求
GET、DELETE、HEAD、OPTIONS
第二个参数将会被处理成 QueryString,追加到url后面。例如:/containers/json?sort=id
response, err := client.Get("/containers/json", map[string]string{
"sort": "id",
})
response, err := client.Delete("/containers/json", nil)
response, err := client.Head("/containers/json", nil)
response, err := client.Options("/containers/json", nil)
POST、PUT、PATCH
同时接受字符串和其它参数类型(将会被格式化为json)
response, err := client.Post("/containers/create", map[string]string{
"Image": "nginx",
})
response, err := client.Put("/containers/create", `{"Image":"nginx"}`)
response, err := client.Patch("/containers/create", `{"Image":"nginx"}`)
原始 HTTP 协议
调用请求API,将会生成类似如下两种的原始 HTTP 协议进行发送,其中的GET和POST将会被替换成实际协议。
GET、DELETE、HEAD、OPTIONS
GET /containers/json HTTP/1.1
Host: domain:80
Connection: close
POST、PUT、PATCH
POST /containers/create?name=nginx HTTP/1.1
Host: localhost
Connection: close
Content-Length: 17
Accept: */*
Content-Type: application/json;charset=UTF-8
User-Agent: native-http-client
Cookie: User-Agent=native-http-client;
{"Image":"nginx"}
响应
response 为字符串格式的原始响应值,例如 Json xml 等,可直接使用
response, err := client.Get("/containers/json", nil)
response, err := client.Put("/containers/create", `{"Image":"nginx"}`)
API
携带 Header
client.WithHeader("User-Agent", "native-http-client")
.WithHeader("Token", "***")
.WithHeader("...", "***")
携带 Cookie
仅当 Header 中未设置 Cookie 字段时生效
client.WithCookie("UserName", "alex")
.WithCookie("UID", "***")
.WithCookie("...", "***")
响应:client.Response
{
"ContentType": "application/json",
"ContentLength": 1054,
"StatusCode": 200,
"Headers": {
"Connection": "close",
"Content-Length": "1054",
"Content-Type": "application/json",
"Date": "Wed, 14 Oct 2020 08:37:20 GMT",
"Server": "nginx/1.18.0"
},
"Cookies": {},
"Body": "{\"Status\":\"OK\",\"...\":\"...\"}"
}
核心原理
对网络发送原始HTTP协议,以下为 POST API 对应的命令示例
unix sock
curl -s --unix-socket /var/run/docker.sock \
-X POST http://localhost/containers/create?name=nginx \
--data '{"Image":"nginx"}'
tcp
telnet domain 80
Trying xxxxxx...
Connected to domain.
Escape character is '^]'.
POST /containers/create?name=nginx HTTP/1.1
Host: localhost
Connection: close
Content-Length: 17
Accept: */*
Content-Type: application/json;charset=UTF-8
User-Agent: native-http-client
Cookie: User-Agent=native-http-client;
{"Image":"nginx"}
鸣谢
- 本项目的实现一定程度上参考了 ddliu/go-httpclient 在此致谢
# Functions
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# Variables
No description provided by the author