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.HTTPStatusEvent;
|
||||
import flash.events.IOErrorEvent;
|
||||
import flash.events.ProgressEvent;
|
||||
import flash.events.SecurityErrorEvent;
|
||||
import flash.net.URLLoader;
|
||||
import flash.net.URLLoaderDataFormat;
|
||||
import flash.net.URLRequest;
|
||||
@@ -19,7 +21,6 @@ import lime.net.HTTPRequest;
|
||||
class FlashHTTPRequest {
|
||||
|
||||
|
||||
private var binary:Bool;
|
||||
private var parent:IHTTPRequest;
|
||||
private var urlLoader:URLLoader;
|
||||
private var urlRequest:URLRequest;
|
||||
@@ -43,40 +44,42 @@ class FlashHTTPRequest {
|
||||
}
|
||||
|
||||
|
||||
public function init (parent:IHTTPRequest):Void {
|
||||
|
||||
this.parent = parent;
|
||||
|
||||
}
|
||||
|
||||
|
||||
private function createURLLoader ():Void {
|
||||
private function construct (binary:Bool):Void {
|
||||
|
||||
urlLoader = new URLLoader ();
|
||||
urlRequest = new URLRequest ();
|
||||
|
||||
var query = "";
|
||||
var uri = parent.uri;
|
||||
|
||||
for (key in parent.formData.keys ()) {
|
||||
if (parent.data != null) {
|
||||
|
||||
if (query.length > 0) query += "&";
|
||||
query += StringTools.urlEncode (key) + "=" + StringTools.urlEncode (Std.string (parent.formData.get (key)));
|
||||
urlRequest.data = parent.data.getData ();
|
||||
|
||||
}
|
||||
|
||||
if (parent.method == GET) {
|
||||
} else {
|
||||
|
||||
if (uri.indexOf ("?") > -1) {
|
||||
for (key in parent.formData.keys ()) {
|
||||
|
||||
uri += "&" + query;
|
||||
|
||||
} else {
|
||||
|
||||
uri += "?" + query;
|
||||
if (query.length > 0) query += "&";
|
||||
query += StringTools.urlEncode (key) + "=" + StringTools.urlEncode (Std.string (parent.formData.get (key)));
|
||||
|
||||
}
|
||||
|
||||
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.followRedirects = parent.followRedirects;
|
||||
|
||||
urlRequest.method = switch (parent.method) {
|
||||
|
||||
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> {
|
||||
|
||||
var promise = new Promise<Bytes> ();
|
||||
|
||||
binary = true;
|
||||
createURLLoader ();
|
||||
construct (true);
|
||||
|
||||
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) {
|
||||
|
||||
promise.error (event.errorID);
|
||||
|
||||
});
|
||||
|
||||
urlLoader.addEventListener (SecurityErrorEvent.SECURITY_ERROR, function (event) {
|
||||
|
||||
promise.error (403);
|
||||
|
||||
});
|
||||
|
||||
urlLoader.addEventListener (Event.COMPLETE, function (event) {
|
||||
|
||||
promise.complete (Bytes.ofData (cast (urlLoader.data, ByteArray)));
|
||||
@@ -146,9 +176,7 @@ class FlashHTTPRequest {
|
||||
public function loadText (uri:String):Future<String> {
|
||||
|
||||
var promise = new Promise<String> ();
|
||||
|
||||
binary = false;
|
||||
createURLLoader ();
|
||||
construct (false);
|
||||
|
||||
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) {
|
||||
|
||||
promise.error (event.errorID);
|
||||
|
||||
});
|
||||
|
||||
urlLoader.addEventListener (SecurityErrorEvent.SECURITY_ERROR, function (event) {
|
||||
|
||||
promise.error (403);
|
||||
|
||||
});
|
||||
|
||||
urlLoader.addEventListener (Event.COMPLETE, function (event) {
|
||||
|
||||
promise.complete (cast (urlLoader.data, String));
|
||||
|
||||
@@ -8,6 +8,7 @@ import haxe.io.Bytes;
|
||||
import lime.app.Future;
|
||||
import lime.app.Promise;
|
||||
import lime.net.HTTPRequest;
|
||||
import lime.net.HTTPRequestHeader;
|
||||
|
||||
|
||||
class HTML5HTTPRequest {
|
||||
@@ -57,26 +58,30 @@ class HTML5HTTPRequest {
|
||||
|
||||
var query = "";
|
||||
|
||||
for (key in parent.formData.keys ()) {
|
||||
if (parent.data == null) {
|
||||
|
||||
if (query.length > 0) query += "&";
|
||||
query += StringTools.urlEncode (key) + "=" + StringTools.urlEncode (Std.string (parent.formData.get (key)));
|
||||
|
||||
}
|
||||
|
||||
if (parent.method == GET) {
|
||||
|
||||
if (uri.indexOf ("?") > -1) {
|
||||
for (key in parent.formData.keys ()) {
|
||||
|
||||
uri += "&" + query;
|
||||
|
||||
} else {
|
||||
|
||||
uri += "?" + query;
|
||||
if (query.length > 0) query += "&";
|
||||
query += StringTools.urlEncode (key) + "=" + StringTools.urlEncode (Std.string (parent.formData.get (key)));
|
||||
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
if (header.name == "Content-Type") hasContentType = true;
|
||||
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);
|
||||
|
||||
processResponse ();
|
||||
promise.complete (bytes);
|
||||
|
||||
} else {
|
||||
|
||||
processResponse ();
|
||||
promise.error (request.status);
|
||||
|
||||
}
|
||||
@@ -161,10 +185,12 @@ class HTML5HTTPRequest {
|
||||
|
||||
if (request.status != null && request.status >= 200 && request.status <= 400) {
|
||||
|
||||
processResponse ();
|
||||
promise.complete (request.responseText);
|
||||
|
||||
} else {
|
||||
|
||||
processResponse ();
|
||||
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;
|
||||
|
||||
contentType = "application/x-www-form-urlencoded";
|
||||
followRedirects = true;
|
||||
enableResponseHeaders = true;
|
||||
formData = new Map ();
|
||||
headers = [];
|
||||
method = GET;
|
||||
|
||||
Reference in New Issue
Block a user