33## Functions
44
55- ` client() ` - returns http client instance for further usage. Avaliable options as table:
6+
67```
78proxy="http(s)://<user>:<password>@host:<port>",
89timeout= 10,
@@ -21,10 +22,13 @@ client_private_key_pem_file = nil,
2122# Prefer this over insecure_ssl when possible
2223root_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
3943local request = http .request (" GET" , " http://hostname.com" )
4044local 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
4656local request = http .request (" GET" , " http://hostname.com" )
@@ -52,18 +62,18 @@ local request = http.request("POST", "http://hostname.com/api.json", "{}")
5262request :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" })
5666local 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 })
6070local 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
7484local 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
7789while 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
110124end
111125```
114128
115129``` lua
116130local 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
119135server :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
0 commit comments