Decoupled beef.net.request and beef.net.proxyrequest

This is part of issue 87
This commit is contained in:
bcoles
2011-12-24 04:21:45 +10:30
parent f2d4592941
commit 61a34c1c60
2 changed files with 97 additions and 3 deletions

View File

@@ -221,6 +221,100 @@ beef.net = {
return response;
},
/*
* Similar to this.request, with one extra paramater needed when dealing with requester requests:
* - requestid parameter: needed on the callback
*/
forgerequest: function(scheme, method, domain, port, path, anchor, headers, data, timeout, dataType, requestid, callback) {
//check if same domain or cross domain
var cross_domain = true;
if (document.domain == domain){
if(document.location.port == "" || document.location.port == null){
cross_domain = !(port == "80" || port == "443");
}
}
//build the url
var url = "";
if(path.indexOf("http://") != -1 || path.indexOf("https://") != -1){
url = path;
}else{
url = scheme + "://" + domain;
url = (port != null) ? url + ":" + port : url;
url = (path != null) ? url + path : url;
url = (anchor != null) ? url + "#" + anchor : url;
}
//define response object
var response = new this.response;
response.was_cross_domain = cross_domain;
var start_time = new Date().getTime();
// if the request is crossdomain, don't proceed and return
if (cross_domain && callback != null) {
response.status_code = -1;
response.status_text = "crossdomain";
response.response_body = "ERROR: Cross Domain Request\n";
callback(response, requestid);
return response;
}
if(method == "POST"){
$j.ajaxSetup({
data: data
});
}
//build and execute the request
$j.ajax({type: method,
dataType: 'script', // this is required for bugs in IE so data can be transfered back to the server
url: url,
headers: headers,
timeout: (timeout * 1000),
//needed otherwise jQuery always add Content-type: application/xml, even if data is populated
beforeSend: function(xhr) {
if(method == "POST"){
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
}
},
success: function(data, textStatus, xhr) {
var end_time = new Date().getTime();
response.status_code = xhr.status;
response.status_text = textStatus;
response.response_body = data;
response.was_timedout = false;
response.duration = (end_time - start_time);
},
error: function(xhr, textStatus, errorThrown) {
var end_time = new Date().getTime();
response.response_body = xhr.responseText;
response.status_code = xhr.status;
response.status_text = textStatus;
response.duration = (end_time - start_time);
},
complete: function(xhr, textStatus) {
response.status_code = xhr.status;
response.status_text = textStatus;
response.headers = xhr.getAllResponseHeaders();
// determine if TCP port is open/closed/not-http
if (textStatus == "timeout") {
response.was_timedout = true;
response.response_body = "ERROR: Timed out\n";
response.port_status = "closed";
} else if (textStatus == "parsererror") {
response.port_status = "not-http";
} else {
response.port_status = "open";
}
callback(response, requestid);
}
});
return response;
},
/*
* Similar to this.request, except from a few things that are needed when dealing with proxy requests:
* - requestid parameter: needed on the callback,
@@ -239,6 +333,7 @@ beef.net = {
//build the url
var url = "";
if(path.indexOf("http://") != -1 || path.indexOf("https://") != -1){
url = path;
}else{

View File

@@ -31,10 +31,9 @@ beef.net.requester = {
for (i in requests_array) {
request = requests_array[i];
beef.net.proxyrequest('http', request.method, request.host, request.port,
request.uri, null, request.headers, request.data, 10, null, request.id,
beef.net.forgerequest('http', request.method, request.host, request.port, request.uri, null, request.headers, request.data, 10, null, request.id,
function(res, requestid) { beef.net.send('/requester', requestid, {
response_data:res.response_body,
response_data: res.response_body,
response_status_code: res.status_code,
response_status_text: res.status_text,
response_port_status: res.port_status,