Additional work on Flash and HTML5 HTTPRequest
This commit is contained in:
@@ -2,8 +2,10 @@ package lime._backend.flash;
|
|||||||
|
|
||||||
|
|
||||||
import flash.events.Event;
|
import flash.events.Event;
|
||||||
|
import flash.events.HTTPStatusEvent;
|
||||||
import flash.events.IOErrorEvent;
|
import flash.events.IOErrorEvent;
|
||||||
import flash.events.ProgressEvent;
|
import flash.events.ProgressEvent;
|
||||||
|
import flash.events.SecurityErrorEvent;
|
||||||
import flash.net.URLLoader;
|
import flash.net.URLLoader;
|
||||||
import flash.net.URLLoaderDataFormat;
|
import flash.net.URLLoaderDataFormat;
|
||||||
import flash.net.URLRequest;
|
import flash.net.URLRequest;
|
||||||
@@ -19,7 +21,6 @@ import lime.net.HTTPRequest;
|
|||||||
class FlashHTTPRequest {
|
class FlashHTTPRequest {
|
||||||
|
|
||||||
|
|
||||||
private var binary:Bool;
|
|
||||||
private var parent:IHTTPRequest;
|
private var parent:IHTTPRequest;
|
||||||
private var urlLoader:URLLoader;
|
private var urlLoader:URLLoader;
|
||||||
private var urlRequest:URLRequest;
|
private var urlRequest:URLRequest;
|
||||||
@@ -43,40 +44,42 @@ class FlashHTTPRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function init (parent:IHTTPRequest):Void {
|
private function construct (binary:Bool):Void {
|
||||||
|
|
||||||
this.parent = parent;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private function createURLLoader ():Void {
|
|
||||||
|
|
||||||
urlLoader = new URLLoader ();
|
urlLoader = new URLLoader ();
|
||||||
|
urlRequest = new URLRequest ();
|
||||||
|
|
||||||
var query = "";
|
var query = "";
|
||||||
var uri = parent.uri;
|
var uri = parent.uri;
|
||||||
|
|
||||||
for (key in parent.formData.keys ()) {
|
if (parent.data != null) {
|
||||||
|
|
||||||
if (query.length > 0) query += "&";
|
urlRequest.data = parent.data.getData ();
|
||||||
query += StringTools.urlEncode (key) + "=" + StringTools.urlEncode (Std.string (parent.formData.get (key)));
|
|
||||||
|
|
||||||
}
|
} else {
|
||||||
|
|
||||||
if (parent.method == GET) {
|
|
||||||
|
|
||||||
if (uri.indexOf ("?") > -1) {
|
for (key in parent.formData.keys ()) {
|
||||||
|
|
||||||
uri += "&" + query;
|
if (query.length > 0) query += "&";
|
||||||
|
query += StringTools.urlEncode (key) + "=" + StringTools.urlEncode (Std.string (parent.formData.get (key)));
|
||||||
} else {
|
|
||||||
|
|
||||||
uri += "?" + query;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
query = "";
|
if (query != "" && parent.method == GET) {
|
||||||
|
|
||||||
|
if (uri.indexOf ("?") > -1) {
|
||||||
|
|
||||||
|
uri += "&" + query;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
uri += "?" + query;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
query = "";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,8 +89,12 @@ class FlashHTTPRequest {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
urlRequest = new URLRequest (uri);
|
urlRequest.url = uri;
|
||||||
|
urlRequest.contentType = parent.contentType;
|
||||||
|
|
||||||
//urlRequest.userAgent = parent.userAgent;
|
//urlRequest.userAgent = parent.userAgent;
|
||||||
|
//urlRequest.followRedirects = parent.followRedirects;
|
||||||
|
|
||||||
urlRequest.method = switch (parent.method) {
|
urlRequest.method = switch (parent.method) {
|
||||||
|
|
||||||
case POST: URLRequestMethod.POST;
|
case POST: URLRequestMethod.POST;
|
||||||
@@ -104,12 +111,17 @@ class FlashHTTPRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function init (parent:IHTTPRequest):Void {
|
||||||
|
|
||||||
|
this.parent = parent;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function loadData (uri:String):Future<Bytes> {
|
public function loadData (uri:String):Future<Bytes> {
|
||||||
|
|
||||||
var promise = new Promise<Bytes> ();
|
var promise = new Promise<Bytes> ();
|
||||||
|
construct (true);
|
||||||
binary = true;
|
|
||||||
createURLLoader ();
|
|
||||||
|
|
||||||
urlLoader.addEventListener (ProgressEvent.PROGRESS, function (event) {
|
urlLoader.addEventListener (ProgressEvent.PROGRESS, function (event) {
|
||||||
|
|
||||||
@@ -125,12 +137,30 @@ class FlashHTTPRequest {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
urlLoader.addEventListener (HTTPStatusEvent.HTTP_STATUS, function (event) {
|
||||||
|
|
||||||
|
parent.responseStatus = event.status;
|
||||||
|
|
||||||
|
if (parent.enableResponseHeaders) {
|
||||||
|
|
||||||
|
parent.responseHeaders = event.responseHeaders;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
urlLoader.addEventListener (IOErrorEvent.IO_ERROR, function (event) {
|
urlLoader.addEventListener (IOErrorEvent.IO_ERROR, function (event) {
|
||||||
|
|
||||||
promise.error (event.errorID);
|
promise.error (event.errorID);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
urlLoader.addEventListener (SecurityErrorEvent.SECURITY_ERROR, function (event) {
|
||||||
|
|
||||||
|
promise.error (403);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
urlLoader.addEventListener (Event.COMPLETE, function (event) {
|
urlLoader.addEventListener (Event.COMPLETE, function (event) {
|
||||||
|
|
||||||
promise.complete (Bytes.ofData (cast (urlLoader.data, ByteArray)));
|
promise.complete (Bytes.ofData (cast (urlLoader.data, ByteArray)));
|
||||||
@@ -146,9 +176,7 @@ class FlashHTTPRequest {
|
|||||||
public function loadText (uri:String):Future<String> {
|
public function loadText (uri:String):Future<String> {
|
||||||
|
|
||||||
var promise = new Promise<String> ();
|
var promise = new Promise<String> ();
|
||||||
|
construct (false);
|
||||||
binary = false;
|
|
||||||
createURLLoader ();
|
|
||||||
|
|
||||||
urlLoader.addEventListener (ProgressEvent.PROGRESS, function (event) {
|
urlLoader.addEventListener (ProgressEvent.PROGRESS, function (event) {
|
||||||
|
|
||||||
@@ -164,12 +192,30 @@ class FlashHTTPRequest {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
urlLoader.addEventListener (HTTPStatusEvent.HTTP_STATUS, function (event) {
|
||||||
|
|
||||||
|
parent.responseStatus = event.status;
|
||||||
|
|
||||||
|
if (parent.enableResponseHeaders) {
|
||||||
|
|
||||||
|
parent.responseHeaders = event.responseHeaders;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
urlLoader.addEventListener (IOErrorEvent.IO_ERROR, function (event) {
|
urlLoader.addEventListener (IOErrorEvent.IO_ERROR, function (event) {
|
||||||
|
|
||||||
promise.error (event.errorID);
|
promise.error (event.errorID);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
urlLoader.addEventListener (SecurityErrorEvent.SECURITY_ERROR, function (event) {
|
||||||
|
|
||||||
|
promise.error (403);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
urlLoader.addEventListener (Event.COMPLETE, function (event) {
|
urlLoader.addEventListener (Event.COMPLETE, function (event) {
|
||||||
|
|
||||||
promise.complete (cast (urlLoader.data, String));
|
promise.complete (cast (urlLoader.data, String));
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import haxe.io.Bytes;
|
|||||||
import lime.app.Future;
|
import lime.app.Future;
|
||||||
import lime.app.Promise;
|
import lime.app.Promise;
|
||||||
import lime.net.HTTPRequest;
|
import lime.net.HTTPRequest;
|
||||||
|
import lime.net.HTTPRequestHeader;
|
||||||
|
|
||||||
|
|
||||||
class HTML5HTTPRequest {
|
class HTML5HTTPRequest {
|
||||||
@@ -57,26 +58,30 @@ class HTML5HTTPRequest {
|
|||||||
|
|
||||||
var query = "";
|
var query = "";
|
||||||
|
|
||||||
for (key in parent.formData.keys ()) {
|
if (parent.data == null) {
|
||||||
|
|
||||||
if (query.length > 0) query += "&";
|
for (key in parent.formData.keys ()) {
|
||||||
query += StringTools.urlEncode (key) + "=" + StringTools.urlEncode (Std.string (parent.formData.get (key)));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parent.method == GET) {
|
|
||||||
|
|
||||||
if (uri.indexOf ("?") > -1) {
|
|
||||||
|
|
||||||
uri += "&" + query;
|
if (query.length > 0) query += "&";
|
||||||
|
query += StringTools.urlEncode (key) + "=" + StringTools.urlEncode (Std.string (parent.formData.get (key)));
|
||||||
} else {
|
|
||||||
|
|
||||||
uri += "?" + query;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
query = "";
|
if (parent.method == GET) {
|
||||||
|
|
||||||
|
if (uri.indexOf ("?") > -1) {
|
||||||
|
|
||||||
|
uri += "&" + query;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
uri += "?" + query;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
query = "";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,13 +93,30 @@ class HTML5HTTPRequest {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var hasContentType = false;
|
||||||
|
|
||||||
for (header in parent.headers) {
|
for (header in parent.headers) {
|
||||||
|
|
||||||
|
if (header.name == "Content-Type") hasContentType = true;
|
||||||
request.setRequestHeader (header.name, header.value);
|
request.setRequestHeader (header.name, header.value);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
request.send (query);
|
if (!hasContentType) {
|
||||||
|
|
||||||
|
request.setRequestHeader ("Content-Type", parent.contentType);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parent.data != null) {
|
||||||
|
|
||||||
|
request.send (parent.data.getData ());
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
request.send (query);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,10 +147,12 @@ class HTML5HTTPRequest {
|
|||||||
|
|
||||||
bytes = Bytes.ofData (request.response);
|
bytes = Bytes.ofData (request.response);
|
||||||
|
|
||||||
|
processResponse ();
|
||||||
promise.complete (bytes);
|
promise.complete (bytes);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
processResponse ();
|
||||||
promise.error (request.status);
|
promise.error (request.status);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -161,10 +185,12 @@ class HTML5HTTPRequest {
|
|||||||
|
|
||||||
if (request.status != null && request.status >= 200 && request.status <= 400) {
|
if (request.status != null && request.status >= 200 && request.status <= 400) {
|
||||||
|
|
||||||
|
processResponse ();
|
||||||
promise.complete (request.responseText);
|
promise.complete (request.responseText);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
processResponse ();
|
||||||
promise.error (request.status);
|
promise.error (request.status);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -181,4 +207,31 @@ class HTML5HTTPRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function processResponse ():Void {
|
||||||
|
|
||||||
|
if (parent.enableResponseHeaders) {
|
||||||
|
|
||||||
|
parent.responseHeaders = [];
|
||||||
|
var name, value;
|
||||||
|
|
||||||
|
for (line in request.getAllResponseHeaders ().split ("\n")) {
|
||||||
|
|
||||||
|
name = StringTools.trim (line.substr (0, line.indexOf (":")));
|
||||||
|
value = StringTools.trim (line.substr (line.indexOf (":") + 1));
|
||||||
|
|
||||||
|
if (name != "") {
|
||||||
|
|
||||||
|
parent.responseHeaders.push (new HTTPRequestHeader (name, value));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
parent.responseStatus = request.status;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -36,6 +36,9 @@ class HTTPRequest<T> implements IHTTPRequest {
|
|||||||
|
|
||||||
this.uri = uri;
|
this.uri = uri;
|
||||||
|
|
||||||
|
contentType = "application/x-www-form-urlencoded";
|
||||||
|
followRedirects = true;
|
||||||
|
enableResponseHeaders = true;
|
||||||
formData = new Map ();
|
formData = new Map ();
|
||||||
headers = [];
|
headers = [];
|
||||||
method = GET;
|
method = GET;
|
||||||
|
|||||||
Reference in New Issue
Block a user