This repository has been archived on 2021-07-14. You can view files and clone it, but cannot push or open issues or pull requests.
scriptcraft/src/main/javascript/http/request.js
2013-03-31 14:54:38 +01:00

103 lines
3.9 KiB
JavaScript

/*************************************************************************
http.request() function
====================
The http.request() function will fetch a web address asynchronously (on a
separate thread)and pass the URL's response to a callback function
which will be executed synchronously (on the main thread). In this
way, http.request() can be used to fetch web content without blocking the
main thread of execution.
Parameters
----------
* request: The request details either a plain URL e.g. "http://scriptcraft.js/sample.json" or an object with the following properties...
- url: The URL of the request.
- method: Should be one of the standard HTTP methods, GET, POST, PUT, DELETE (defaults to GET).
- params: A Javascript object with name-value pairs. This is for supplying parameters to the server.
* callback: The function to be called when the Web request has completed. This function takes the following parameters...
- responseCode: The numeric response code from the server. If the server did not respond with 200 OK then the response parameter will be undefined.
- response: A string (if the response is of type text) or object containing the HTTP response body.
Example
-------
The following example illustrates how to use http.request to make a request to a JSON web service and evaluate its response...
var jsResponse;
http.request("http://scriptcraftjs.org/sample.json",function(responseCode, responseBody){
jsResponse = eval("(" + responseBody + ")");
});
... The following example illustrates a more complex use-case POSTing parameters to a CGI process on a server...
http.request({ url: "http://pixenate.com/pixenate/pxn8.pl",
method: "POST",
params: {script: "[]"}
}, function( responseCode, responseBody){
var jsObj = eval("(" + responseBody + ")");
});
***/
var http = http || {};
http.request = function( request, callback)
{
var paramsToString = function(params){
var result = "";
var paramNames = [];
for (var i in params){
paramNames.push(i);
}
for (var i = 0;i < paramNames.length;i++){
result += paramNames[i] + "=" + encodeURI(params[paramNames[i]]);
if (i < paramNames.length-1)
result += "&";
}
return result;
};
server.scheduler.runTaskAsynchronously(__plugin,function()
{
var url, paramsAsString, conn, requestMethod;
if (typeof request === "string"){
url = request;
requestMethod = "GET";
}else{
paramsAsString = paramsToString(request.params);
requestMethod = request.method || "GET";
if (requestMethod == "GET" && request.params){
// append each parameter to the URL
url = request.url + "?" + paramsAsString;
}
}
conn = new java.net.URL(url).openConnection();
conn.requestMethod = requestMethod;
conn.doOutput = true;
conn.instanceFollowRedirects = false;
if (conn.requestMethod == "POST"){
conn.doInput = true;
// put each parameter in the outputstream
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("charset", "utf-8");
conn.setRequestProperty("Content-Length", "" + paramsAsString.length);
conn.useCaches =false ;
wr = new java.io.DataOutputStream(conn.getOutputStream ());
wr.writeBytes(paramsAsString);
wr.flush();
wr.close();
}
var rc = conn.responseCode;
var response;
var stream;
if (rc == 200){
stream = conn.getInputStream();
response = new java.util.Scanner(stream).useDelimiter("\\A").next();
}
server.scheduler.runTask(__plugin,function(){
callback(rc,response);
});
});
};