diff options
author | Diego Nehab <diego@tecgraf.puc-rio.br> | 2004-06-04 15:15:45 +0000 |
---|---|---|
committer | Diego Nehab <diego@tecgraf.puc-rio.br> | 2004-06-04 15:15:45 +0000 |
commit | 9ed7f955e5fc69af9bf1794fa2c8cd227981ba24 (patch) | |
tree | 8c3521366ef84f534bbec278437be7ea24e2ac1c /src/http.lua | |
parent | 63d60223da9de60f873ca08a25dbd9512c998929 (diff) | |
download | luasocket-9ed7f955e5fc69af9bf1794fa2c8cd227981ba24.tar.gz luasocket-9ed7f955e5fc69af9bf1794fa2c8cd227981ba24.tar.bz2 luasocket-9ed7f955e5fc69af9bf1794fa2c8cd227981ba24.zip |
Só pra não perder se der merda.
Diffstat (limited to 'src/http.lua')
-rw-r--r-- | src/http.lua | 57 |
1 files changed, 28 insertions, 29 deletions
diff --git a/src/http.lua b/src/http.lua index 66a236d..ebe6b54 100644 --- a/src/http.lua +++ b/src/http.lua | |||
@@ -5,23 +5,22 @@ | |||
5 | -- Conforming to RFC 2616 | 5 | -- Conforming to RFC 2616 |
6 | -- RCS ID: $Id$ | 6 | -- RCS ID: $Id$ |
7 | ----------------------------------------------------------------------------- | 7 | ----------------------------------------------------------------------------- |
8 | -- make sure LuaSocket is loaded | ||
9 | require("socket") | ||
10 | -- get LuaSocket namespace | ||
11 | local socket = _G[LUASOCKET_LIBNAME] | ||
12 | 8 | ||
13 | -- require other modules | 9 | ----------------------------------------------------------------------------- |
14 | require("ltn12") | 10 | -- Load other required modules |
15 | require("mime") | 11 | ------------------------------------------------------------------------------- |
16 | -- get MIME namespace | 12 | local socket = require("socket") |
17 | local mime = _G[MIME_LIBNAME] | 13 | local ltn12 = require("ltn12") |
18 | require("url") | 14 | local mime = require("mime") |
15 | local url = require("url") | ||
19 | 16 | ||
20 | -- create namespace inside LuaSocket namespace | 17 | ----------------------------------------------------------------------------- |
21 | socket.http = socket.http or {} | 18 | -- Setup namespace |
19 | ------------------------------------------------------------------------------- | ||
20 | http = {} | ||
22 | -- make all module globals fall into namespace | 21 | -- make all module globals fall into namespace |
23 | setmetatable(socket.http, { __index = _G }) | 22 | setmetatable(http, { __index = _G }) |
24 | setfenv(1, socket.http) | 23 | setfenv(1, http) |
25 | 24 | ||
26 | ----------------------------------------------------------------------------- | 25 | ----------------------------------------------------------------------------- |
27 | -- Program constants | 26 | -- Program constants |
@@ -116,17 +115,17 @@ local function receive_status(reqt, respt, tmp) | |||
116 | end | 115 | end |
117 | 116 | ||
118 | local function request_uri(reqt, respt, tmp) | 117 | local function request_uri(reqt, respt, tmp) |
119 | local url = tmp.parsed | 118 | local u = tmp.parsed |
120 | if not reqt.proxy then | 119 | if not reqt.proxy then |
121 | local parsed = tmp.parsed | 120 | local parsed = tmp.parsed |
122 | url = { | 121 | u = { |
123 | path = parsed.path, | 122 | path = parsed.path, |
124 | params = parsed.params, | 123 | params = parsed.params, |
125 | query = parsed.query, | 124 | query = parsed.query, |
126 | fragment = parsed.fragment | 125 | fragment = parsed.fragment |
127 | } | 126 | } |
128 | end | 127 | end |
129 | return socket.url.build(url) | 128 | return url.build(u) |
130 | end | 129 | end |
131 | 130 | ||
132 | local function send_request(reqt, respt, tmp) | 131 | local function send_request(reqt, respt, tmp) |
@@ -155,7 +154,7 @@ local function open(reqt, respt, tmp) | |||
155 | local proxy = reqt.proxy or PROXY | 154 | local proxy = reqt.proxy or PROXY |
156 | local host, port | 155 | local host, port |
157 | if proxy then | 156 | if proxy then |
158 | local pproxy = socket.url.parse(proxy) | 157 | local pproxy = url.parse(proxy) |
159 | socket.try(pproxy.port and pproxy.host, "invalid proxy") | 158 | socket.try(pproxy.port and pproxy.host, "invalid proxy") |
160 | host, port = pproxy.host, pproxy.port | 159 | host, port = pproxy.host, pproxy.port |
161 | else | 160 | else |
@@ -169,15 +168,13 @@ end | |||
169 | 168 | ||
170 | local function adjust_headers(reqt, respt, tmp) | 169 | local function adjust_headers(reqt, respt, tmp) |
171 | local lower = {} | 170 | local lower = {} |
172 | local headers = reqt.headers or {} | ||
173 | -- set default headers | ||
174 | lower["user-agent"] = USERAGENT | ||
175 | -- override with user values | 171 | -- override with user values |
176 | for i,v in headers do | 172 | for i,v in (reqt.headers or lower) do |
177 | lower[string.lower(i)] = v | 173 | lower[string.lower(i)] = v |
178 | end | 174 | end |
175 | lower["user-agent"] = lower["user-agent"] or USERAGENT | ||
176 | -- these cannot be overriden | ||
179 | lower["host"] = tmp.parsed.host | 177 | lower["host"] = tmp.parsed.host |
180 | -- this cannot be overriden | ||
181 | lower["connection"] = "close" | 178 | lower["connection"] = "close" |
182 | -- store results | 179 | -- store results |
183 | tmp.headers = lower | 180 | tmp.headers = lower |
@@ -185,7 +182,7 @@ end | |||
185 | 182 | ||
186 | local function parse_url(reqt, respt, tmp) | 183 | local function parse_url(reqt, respt, tmp) |
187 | -- parse url with default fields | 184 | -- parse url with default fields |
188 | local parsed = socket.url.parse(reqt.url, { | 185 | local parsed = url.parse(reqt.url, { |
189 | host = "", | 186 | host = "", |
190 | port = PORT, | 187 | port = PORT, |
191 | path ="/", | 188 | path ="/", |
@@ -250,7 +247,7 @@ local function redirect(reqt, respt, tmp) | |||
250 | method = reqt.method, | 247 | method = reqt.method, |
251 | -- the RFC says the redirect URL has to be absolute, but some | 248 | -- the RFC says the redirect URL has to be absolute, but some |
252 | -- servers do not respect that | 249 | -- servers do not respect that |
253 | url = socket.url.absolute(reqt.url, respt.headers["location"]), | 250 | url = url.absolute(reqt.url, respt.headers["location"]), |
254 | source = reqt.source, | 251 | source = reqt.source, |
255 | sink = reqt.sink, | 252 | sink = reqt.sink, |
256 | headers = reqt.headers, | 253 | headers = reqt.headers, |
@@ -296,20 +293,20 @@ function request(reqt) | |||
296 | return respt | 293 | return respt |
297 | end | 294 | end |
298 | 295 | ||
299 | function get(url) | 296 | function get(u) |
300 | local t = {} | 297 | local t = {} |
301 | respt = request { | 298 | respt = request { |
302 | url = url, | 299 | url = u, |
303 | sink = ltn12.sink.table(t) | 300 | sink = ltn12.sink.table(t) |
304 | } | 301 | } |
305 | return (table.getn(t) > 0 or nil) and table.concat(t), respt.headers, | 302 | return (table.getn(t) > 0 or nil) and table.concat(t), respt.headers, |
306 | respt.code, respt.error | 303 | respt.code, respt.error |
307 | end | 304 | end |
308 | 305 | ||
309 | function post(url, body) | 306 | function post(u, body) |
310 | local t = {} | 307 | local t = {} |
311 | respt = request { | 308 | respt = request { |
312 | url = url, | 309 | url = u, |
313 | method = "POST", | 310 | method = "POST", |
314 | source = ltn12.source.string(body), | 311 | source = ltn12.source.string(body), |
315 | sink = ltn12.sink.table(t), | 312 | sink = ltn12.sink.table(t), |
@@ -318,3 +315,5 @@ function post(url, body) | |||
318 | return (table.getn(t) > 0 or nil) and table.concat(t), | 315 | return (table.getn(t) > 0 or nil) and table.concat(t), |
319 | respt.headers, respt.code, respt.error | 316 | respt.headers, respt.code, respt.error |
320 | end | 317 | end |
318 | |||
319 | return http | ||