123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /**
- * HTTP Client using the JSGI standard objects
- */
- var LazyArray = require("../../lazy-array").LazyArray;
- // configurable proxy server setting, defaults to http_proxy env var
- exports.proxyServer = require("../../process").env.http_proxy;
- exports.request = function(request){
- var url = new java.net.URL(request.url),
- connection = url.openConnection(),
- method = request.method || "GET",
- is = null,
- promised = true;
- if (request.jsgi && "async" in request.jsgi) promised = request.jsgi.async;
- for (var header in this.headers) {
- var value = this.headers[header];
- connection.addRequestProperty(String(header), String(value));
- }
- connection.setFollowRedirects(false)
- connection.setDoInput(true);
- connection.setRequestMethod(method);
- if (request.body && typeof request.body.forEach === "function") {
- connection.setDoOutput(true);
- var writer = new java.io.OutputStreamWriter(connection.getOutputStream());
- request.body.forEach(function(chunk) {
- writer.write(chunk);
- writer.flush();
- });
- }
- if (typeof writer !== "undefined") writer.close();
- try {
- connection.connect();
- is = connection.getInputStream();
- }
- catch (e) {
- is = connection.getErrorStream();
- }
- var status = Number(connection.getResponseCode()),
- headers = {};
- for (var i = 0;; i++) {
- var key = connection.getHeaderFieldKey(i),
- value = connection.getHeaderField(i);
- if (!key && !value)
- break;
- // returns the HTTP status code with no key, ignore it.
- if (key) {
- key = String(key).toLowerCase();
- value = String(value);
- if (headers[key]) {
- if (!Array.isArray(headers[key])) headers[key] = [headers[key]];
- headers[key].push(value);
- }
- else {
- headers[key] = value;
- }
- }
- }
- var reader = new java.io.BufferedReader(new java.io.InputStreamReader(is)),
- builder = new java.lang.StringBuilder(),
- line;
- // FIXME create deferred and LazyArray
- while((line = reader.readLine()) != null){
- builder.append(line + '\n');
- }
- if (typeof writer !== "undefined") writer.close();
- reader.close();
- return {
- status: status,
- headers: headers,
- body: LazyArray({
- some: function(write) {
- write(builder.toString());
- }
- })
- }
- };
|