112 |
112 |
113 local function handleerr(err) log("error", "Traceback[http]: %s: %s", tostring(err), debug_traceback()); end |
113 local function handleerr(err) log("error", "Traceback[http]: %s: %s", tostring(err), debug_traceback()); end |
114 function request(u, ex, callback) |
114 function request(u, ex, callback) |
115 local req = url.parse(u); |
115 local req = url.parse(u); |
116 |
116 |
|
117 if not (req and req.host) then |
|
118 return nil, "invalid-url"; |
|
119 end |
|
120 |
|
121 if not req.path then |
|
122 req.path = "/"; |
|
123 end |
|
124 |
117 local custom_headers, body; |
125 local custom_headers, body; |
118 local default_headers = { ["Host"] = req.host, ["User-Agent"] = "Prosody XMPP Server" } |
126 local default_headers = { ["Host"] = req.host, ["User-Agent"] = "Prosody XMPP Server" } |
119 |
127 |
120 |
128 |
121 if req.userinfo then |
129 if req.userinfo then |
137 req.handler, req.conn = server.wrapclient(socket.tcp(), req.host, req.port or 80, listener, "*a"); |
145 req.handler, req.conn = server.wrapclient(socket.tcp(), req.host, req.port or 80, listener, "*a"); |
138 req.write = req.handler.write; |
146 req.write = req.handler.write; |
139 req.conn:settimeout(0); |
147 req.conn:settimeout(0); |
140 local ok, err = req.conn:connect(req.host, req.port or 80); |
148 local ok, err = req.conn:connect(req.host, req.port or 80); |
141 if not ok and err ~= "timeout" then |
149 if not ok and err ~= "timeout" then |
|
150 callback(nil, 0, req); |
142 return nil, err; |
151 return nil, err; |
143 end |
152 end |
144 |
153 |
145 local request_line = { req.method or "GET", " ", req.path, " HTTP/1.1\r\n" }; |
154 local request_line = { req.method or "GET", " ", req.path, " HTTP/1.1\r\n" }; |
146 |
155 |