Skip to content

Commit 9ca2f8a

Browse files
committed
Add to README
1 parent 8872895 commit 9ca2f8a

File tree

2 files changed

+118
-41
lines changed

2 files changed

+118
-41
lines changed

http/README.md

Lines changed: 117 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Functions
44

55
- `client()` - returns http client instance for further usage. Avaliable options as table:
6+
67
```
78
proxy="http(s)://<user>:<password>@host:<port>",
89
timeout= 10,
@@ -21,10 +22,13 @@ client_private_key_pem_file = nil,
2122
# Prefer this over insecure_ssl when possible
2223
root_cas_pem_file = "",
2324
```
25+
2426
- `request(method, url, [data])` - make request userdata.
2527

2628
## Methods
29+
2730
### client
31+
2832
- `do_request(request)` - returns result of request. Avaliable data are: 'body', 'headers', 'code'
2933

3034
## Examples
@@ -38,9 +42,15 @@ local client = http.client()
3842
-- GET
3943
local request = http.request("GET", "http://hostname.com")
4044
local result, err = client:do_request(request)
41-
if err then error(err) end
42-
if not(result.code == 200) then error("code") end
43-
if not(result.body == "xxx.xxx.xxx.xxx") then error("body") end
45+
if err then
46+
error(err)
47+
end
48+
if not (result.code == 200) then
49+
error("code")
50+
end
51+
if not (result.body == "xxx.xxx.xxx.xxx") then
52+
error("body")
53+
end
4454

4555
-- auth basic
4656
local request = http.request("GET", "http://hostname.com")
@@ -52,18 +62,18 @@ local request = http.request("POST", "http://hostname.com/api.json", "{}")
5262
request:header_set("Content-Type", "application/json")
5363

5464
-- with proxy
55-
local client = http.client({proxy="http(s)://login:password@hostname.com"})
65+
local client = http.client({ proxy = "http(s)://login:password@hostname.com" })
5666
local request = http.request("POST", "http://hostname.com/api.json", "{}")
5767

5868
-- ignore ssl
59-
local client = http.client({insecure_ssl=true})
69+
local client = http.client({ insecure_ssl = true })
6070
local request = http.request("POST", "http://hostname.com/api.json", "{}")
6171

6272
-- set headers for all request
63-
local client = http.client({ headers={key="value"} })
73+
local client = http.client({ headers = { key = "value" } })
6474

6575
-- set basic auth for all request
66-
local client = http.client({basic_auth_user="admin", basic_auth_password="123456"})
76+
local client = http.client({ basic_auth_user = "admin", basic_auth_password = "123456" })
6777
```
6878

6979
### Server
@@ -72,40 +82,44 @@ local client = http.client({basic_auth_user="admin", basic_auth_password="123456
7282

7383
```lua
7484
local server, err = http.server("127.0.0.1:1113")
75-
if err then error(err) end
85+
if err then
86+
error(err)
87+
end
7688

7789
while true do
78-
local request, response = server:accept() -- lock and wait request
79-
80-
-- print request
81-
print("host:", request.host)
82-
print("method:", request.method)
83-
print("referer:", request.referer)
84-
print("proto:", request.proto)
85-
print("path:", request.path)
86-
print("raw_path:", request.raw_path)
87-
print("raw_query:", request.raw_query)
88-
print("request_uri:", request.request_uri)
89-
print("remote_addr:", request.remote_addr)
90-
print("user_agent: "..request.user_agent)
91-
92-
-- get body
93-
local body, err = request.body()
94-
if err then error(err) end
95-
print("body:", body)
96-
97-
for k, v in pairs(request.headers) do
98-
print("header: ", k, v)
99-
end
100-
for k, v in pairs(request.query) do
101-
print("query params: ", k, "=" ,v)
102-
end
103-
-- write response
104-
response:code(200) -- write header
105-
response:header("content-type", "application/json")
106-
response:write(request.request_uri) -- write data
107-
-- response:redirect("http://google.com")
108-
response:done() -- end response
90+
local request, response = server:accept() -- lock and wait request
91+
92+
-- print request
93+
print("host:", request.host)
94+
print("method:", request.method)
95+
print("referer:", request.referer)
96+
print("proto:", request.proto)
97+
print("path:", request.path)
98+
print("raw_path:", request.raw_path)
99+
print("raw_query:", request.raw_query)
100+
print("request_uri:", request.request_uri)
101+
print("remote_addr:", request.remote_addr)
102+
print("user_agent: " .. request.user_agent)
103+
104+
-- get body
105+
local body, err = request.body()
106+
if err then
107+
error(err)
108+
end
109+
print("body:", body)
110+
111+
for k, v in pairs(request.headers) do
112+
print("header: ", k, v)
113+
end
114+
for k, v in pairs(request.query) do
115+
print("query params: ", k, "=", v)
116+
end
117+
-- write response
118+
response:code(200) -- write header
119+
response:header("content-type", "application/json")
120+
response:write(request.request_uri) -- write data
121+
-- response:redirect("http://google.com")
122+
response:done() -- end response
109123

110124
end
111125
```
@@ -114,7 +128,9 @@ end
114128

115129
```lua
116130
local server, err = http.server("127.0.0.1:1113")
117-
if err then error(err) end
131+
if err then
132+
error(err)
133+
end
118134

119135
server:do_handle_string([[ -- do_handle_file
120136
@@ -132,6 +148,67 @@ response:done()
132148
]]
133149
```
134150

151+
#### Handle variant (multithreaded as function)
152+
153+
```lua
154+
local server, err = http.server("127.0.0.1:1113")
155+
assert(not err, tostring(err))
156+
157+
server:do_handle_function(function(response, request)
158+
response:code(200)
159+
response:write("OK\n")
160+
response:done()
161+
end)
162+
```
163+
164+
#### Listen to an open port and get the address (host:port)
165+
166+
```lua
167+
local server, err = http.server {}
168+
assert(not err, tostring(err))
169+
local addr = server:addr()
170+
```
171+
172+
#### TLS support
173+
174+
```lua
175+
local server, err = http.server {
176+
addr = "127.0.0.1:1113",
177+
178+
-- Setting both of these enables TLS
179+
server_public_cert_pem_file = "test/data/test.cert.pem",
180+
server_private_key_pem_file = "test/data/test.key.pem",
181+
}
182+
assert(not err, tostring(err))
183+
184+
server:do_handle_function(function(response, request)
185+
response:code(200)
186+
response:write("OK\n")
187+
response:done()
188+
end)
189+
```
190+
191+
#### mTLS support (enforce client certs)
192+
193+
```lua
194+
local server, err = http.server {
195+
addr = "127.0.0.1:1113",
196+
client_cas_pem_file = "test/data/test.cert.pem",
197+
client_auth = "RequireAndVerifyClientCert", -- See https://pkg.go.dev/crypto/tls@go1.19.2#ClientAuthType
198+
199+
-- Setting both of these enables TLS
200+
server_public_cert_pem_file = "test/data/test.cert.pem",
201+
server_private_key_pem_file = "test/data/test.key.pem",
202+
}
203+
assert(not err, tostring(err))
204+
205+
server:do_handle_function(function(response, request)
206+
response:code(200)
207+
response:write("OK\n")
208+
response:done()
209+
end)
210+
```
211+
135212
#### Serve Static files
136213

137214
```lua

http/test/test_server.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ function Test_do_handle_function(t)
1313
addr_ch:send(server:addr())
1414
server:do_handle_function(function(response, request)
1515
print(string.format("response = %s", response))
16-
response:write("OK\n")
1716
response:code(200)
17+
response:write("OK\n")
1818
response:done()
1919
end)
2020
]]

0 commit comments

Comments
 (0)