Example #1
0
        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;
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }