private MyHTTPResponse MakeSyncRequest(MyHTTPRequest req) { String url; if (req.resource.StartsWith("http", StringComparison.InvariantCultureIgnoreCase)) { url = req.resource; } else { url = endpoint.ToString(); if (! url.EndsWith("/") && ! req.resource.StartsWith("/")) { url += "/"; } url += req.resource; } if (req.queryParams != null) { String qs = ""; foreach (KeyValuePair<String, String> entry in req.queryParams) { if (qs != "") { qs += "&"; } qs += HttpUtility.UrlEncode(entry.Key) + "=" + HttpUtility.UrlEncode(entry.Value); } if (qs != "") { url += "?" + qs; } } // TODO: handle special properties we recognize, such as content type, modified since, etc. var webReq = (HttpWebRequest)WebRequest.Create(url); webReq.Method = req.method; webReq.Headers.Add("X-Experience-API-Version", version.ToString()); if (auth != null) { webReq.Headers.Add("Authorization", auth); } if (req.headers != null) { foreach (KeyValuePair<String, String> entry in req.headers) { webReq.Headers.Add(entry.Key, entry.Value); } } if (req.contentType != null) { webReq.ContentType = req.contentType; } else { webReq.ContentType = "application/octet-stream"; } if (req.content != null) { webReq.ContentLength = req.content.Length; using (var stream = webReq.GetRequestStream()) { stream.Write(req.content, 0, req.content.Length); } } MyHTTPResponse resp; try { using (var webResp = (HttpWebResponse)webReq.GetResponse()) { resp = new MyHTTPResponse(webResp); } } catch (WebException ex) { if (ex.Response != null) { using (var webResp = (HttpWebResponse)ex.Response) { resp = new MyHTTPResponse(webResp); } } else { resp = new MyHTTPResponse(); resp.content = Encoding.UTF8.GetBytes("Web exception without '.Response'"); } resp.ex = ex; } return resp; }
private MyHTTPResponse MakeSyncRequest(MyHTTPRequest req) { String url; if (req.resource.StartsWith("http", StringComparison.InvariantCultureIgnoreCase)) { url = req.resource; } else { url = endpoint.ToString(); if (!url.EndsWith("/") && !req.resource.StartsWith("/")) { url += "/"; } url += req.resource; } if (req.queryParams != null) { String qs = ""; foreach (KeyValuePair <String, String> entry in req.queryParams) { if (qs != "") { qs += "&"; } qs += HttpUtility.UrlEncode(entry.Key) + "=" + HttpUtility.UrlEncode(entry.Value); } if (qs != "") { url += "?" + qs; } } // TODO: handle special properties we recognize, such as content type, modified since, etc. var webReq = (HttpWebRequest)WebRequest.Create(url); webReq.Method = req.method; webReq.Headers.Add("X-Experience-API-Version", version.ToString()); if (auth != null) { webReq.Headers.Add("Authorization", auth); } if (req.headers != null) { foreach (KeyValuePair <String, String> entry in req.headers) { webReq.Headers.Add(entry.Key, entry.Value); } } if (req.contentType != null) { webReq.ContentType = req.contentType; } else { webReq.ContentType = "application/octet-stream"; } if (req.content != null) { webReq.ContentLength = req.content.Length; using (var stream = webReq.GetRequestStream()) { stream.Write(req.content, 0, req.content.Length); } } MyHTTPResponse resp; try { using (var webResp = (HttpWebResponse)webReq.GetResponse()) { resp = new MyHTTPResponse(webResp); } } catch (WebException ex) { if (ex.Response != null) { using (var webResp = (HttpWebResponse)ex.Response) { resp = new MyHTTPResponse(webResp); } } else { resp = new MyHTTPResponse(); resp.content = Encoding.UTF8.GetBytes("Web exception without '.Response'"); } resp.ex = ex; } return(resp); }
async Task <MyHTTPResponse> MakeRequest(MyHTTPRequest req) { string url; if (req.resource.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { url = req.resource; } else { url = endpoint.ToString(); if (!url.EndsWith("/", StringComparison.Ordinal) && !req.resource.StartsWith("/", StringComparison.Ordinal)) { url += "/"; } url += req.resource; } if (req.queryParams != null) { string qs = ""; foreach (KeyValuePair <string, string> entry in req.queryParams) { if (qs != "") { qs += "&"; } qs += WebUtility.UrlEncode(entry.Key) + "=" + WebUtility.UrlEncode(entry.Value); } if (qs != "") { url += "?" + qs; } } var webReq = new HttpRequestMessage(req.method, new Uri(url)); // We only have one client. We cannot modify it while its in use. await makeRequestSemaphore.WaitAsync(); webReq.Headers.Add("X-Experience-API-Version", version.ToString()); webReq.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(req.contentType ?? "application/content-stream")); if (auth != null) { webReq.Headers.Add("Authorization", auth); } if (req.headers != null) { foreach (var entry in req.headers) { if (webReq.Headers.Contains(entry.Key)) { makeRequestSemaphore.Release(); throw new InvalidOperationException($"Tried to add duplicate entry {entry.Key} to request headers with value {entry.Value}; previous value {client.DefaultRequestHeaders.GetValues(entry.Key)}"); } webReq.Headers.Add(entry.Key, entry.Value); } } if (req.content != null) { webReq.Content = new ByteArrayContent(req.content); webReq.Content.Headers.Add("Content-Length", req.content.Length.ToString()); webReq.Content.Headers.Add("Content-Type", req.contentType ?? "text/plain"); } MyHTTPResponse resp; try { var response = await client.SendAsync(webReq).ConfigureAwait(false); resp = new MyHTTPResponse(response); } catch (WebException ex) { if (ex.Response != null) { resp = new MyHTTPResponse(); using (var stream = ex.Response.GetResponseStream()) { resp.content = ReadFully(stream, (int)ex.Response.ContentLength); } resp.contentType = ex.Response.ContentType; resp.ex = ex; } else { resp = new MyHTTPResponse(); resp.content = Encoding.UTF8.GetBytes("Web exception without '.Response'"); } resp.ex = ex; } finally { makeRequestSemaphore.Release(); } return(resp); }
private MyHTTPResponse MakeSyncRequest(MyHTTPRequest req) { String url; // Replaced: if (req.resource.StartsWith("http", StringComparison.InvariantCultureIgnoreCase)) // Unity build error // With.... if (req.resource.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { url = req.resource; } else { url = endpoint.ToString(); if (!url.EndsWith("/") && !req.resource.StartsWith("/")) { url += "/"; } url += req.resource; } /////////// /////////// /////////// if (req.queryParams != null) { String qs = ""; foreach (KeyValuePair <String, String> entry in req.queryParams) { if (qs != "") { qs += "&"; } qs += WebUtility.UrlEncode(entry.Key) + "=" + WebUtility.UrlEncode(entry.Value); } if (qs != "") { url += "?" + qs; } } ///////// //////// //////// // TODO: handle special properties we recognize, such as content type, modified since, etc. var unityWebReq = new UnityWebRequest(); unityWebReq.url = url; unityWebReq.method = req.method; unityWebReq.SetRequestHeader("X-Experience-API-Version", version.ToString()); if (auth != null) { unityWebReq.SetRequestHeader("Authorization", auth); } if (req.headers != null) { foreach (KeyValuePair <String, String> entry in req.headers) { unityWebReq.SetRequestHeader(entry.Key, entry.Value); } } if (req.contentType != null) { unityWebReq.SetRequestHeader("Content-Type", req.contentType); } else { unityWebReq.SetRequestHeader("Content-type", "application/octet-stream"); } if (req.content != null) { unityWebReq.SetRequestHeader("content-length", req.content.Length.ToString()); unityWebReq.uploadHandler = (UploadHandler) new UploadHandlerRaw(req.content); unityWebReq.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer(); unityWebReq.chunkedTransfer = false; // Is this needed? unityWebReq.SendWebRequest(); unityWebReq.timeout = 10; while (!unityWebReq.isDone) /// erghhhh, is this safe? Make sure there is a timeout attached in this class somewhere... { // Wait. Makes it sync in Unity. Think this is fineeeee } } // Do we need to use a "while(!request.downloadHandler.isDone)" ???? MyHTTPResponse resp = new MyHTTPResponse(unityWebReq); // LAAR TODO: Ensure that all functionality / safety guards from below are contained. /* * try * { * * using (var webResp = (HttpWebResponse)webReq.GetResponse()) // Unity build error * { * resp = new MyHTTPResponse(webResp); * } * * } * catch (WebException ex) * { * if (ex.Response != null) * { * using (var webResp = (HttpWebResponse)ex.Response) * { * resp = new MyHTTPResponse(webResp); * } * } * else * { * resp = new MyHTTPResponse(); * resp.content = Encoding.UTF8.GetBytes("Web exception without '.Response'"); * } * resp.ex = ex; * } * // */ return(resp); }