public void TestGetResponseAsync3_WebRequestTimeout_NoThrow()
        {
            using (CancellationTokenSource cts = new CancellationTokenSource())
            {
                WebRequest request = WebRequest.CreateHttp("http://httpbin.org/delay/6");
                request.Timeout = 1000;
                request.Method  = "GET";

                Task <WebResponse> responseTask = null;

                try
                {
                    responseTask = WebRequestExtensions.GetResponseAsync(request, false, cts.Token);
                    responseTask.Wait();
                    Assert.Fail("Expected a WebException wrapped in an AggregateException");
                }
                catch (AggregateException ex)
                {
                    Assert.IsNotNull(responseTask);
                    Assert.AreEqual(TaskStatus.Faulted, responseTask.Status);
                    Assert.AreEqual(1, ex.InnerExceptions.Count);
                    Assert.IsInstanceOfType(ex.InnerExceptions[0], typeof(WebException));

                    WebException webException = (WebException)ex.InnerExceptions[0];
                    Assert.AreEqual(WebExceptionStatus.Timeout, webException.Status);
                }
            }
        }
        public void TestGetRequestStreamAsync()
        {
            WebRequest request = WebRequest.CreateHttp("http://httpbin.org/post");

            request.Method = "POST";

            string sampleData = "Sample Data";

            byte[]       buffer       = Encoding.UTF8.GetBytes(sampleData);
            MemoryStream outputStream = new MemoryStream();

            Task testTask =
                WebRequestExtensions.GetRequestStreamAsync(request)
                .Then(task => StreamExtensions.WriteAsync(task.Result, buffer, 0, buffer.Length, CancellationToken.None))
                .Then(task => WebRequestExtensions.GetResponseAsync(request))
                .Then(task => StreamExtensions.CopyToAsync(task.Result.GetResponseStream(), outputStream));

            testTask.Wait();
            Assert.AreEqual(TaskStatus.RanToCompletion, testTask.Status);
            Console.Error.WriteLine(Encoding.UTF8.GetString(outputStream.GetBuffer()));

            PostData postData = JsonConvert.DeserializeObject <PostData>(Encoding.UTF8.GetString(outputStream.GetBuffer()));

            Assert.AreEqual(sampleData, postData.data);
            Assert.AreEqual(request.RequestUri.OriginalString, postData.url);
        }
        public void TestGetResponseAsync3_Timeout_Throw()
        {
            using (CancellationTokenSource cts = new CancellationTokenSource())
            {
                cts.CancelAfter(TimeSpan.FromSeconds(2));

                WebRequest request = WebRequest.CreateHttp("http://httpbin.org/delay/6");
                request.Method = "GET";

                Task <WebResponse> responseTask = null;

                try
                {
                    responseTask = WebRequestExtensions.GetResponseAsync(request, true, cts.Token);
                    responseTask.Wait();
                    Assert.Fail("Expected a TaskCanceledException wrapped in an AggregateException");
                }
                catch (AggregateException ex)
                {
                    Assert.IsNotNull(responseTask);
                    Assert.AreEqual(TaskStatus.Canceled, responseTask.Status);
                    Assert.AreEqual(1, ex.InnerExceptions.Count);
                    Assert.IsInstanceOfType(ex.InnerExceptions[0], typeof(TaskCanceledException));
                }
            }
        }
Esempio n. 4
0
        protected override IDictionary <string, string> GetUserData(string accessToken)
        {
            var openid = GetOpenid(accessToken);
            var url    = (UserInfoEndpoint + "?" + accessToken)
                         .AddQueryParam("openid", openid)
                         .AddQueryParam("oauth_consumer_key", this.appId)
                         .AddQueryParam("format", "json");

            var text      = WebRequestExtensions.Get(url);
            var graphData = JsonHelper.Deserialize <TencentGraphData>(text);

            var dictionary = new Dictionary <string, string>();

            dictionary.AddItemIfNotEmpty("id", openid);
            dictionary.AddItemIfNotEmpty("username", graphData.NickName);
            dictionary.AddItemIfNotEmpty("name", graphData.NickName);
            //dictionary.AddItemIfNotEmpty("msg", graphData.Msg);
            //dictionary.AddItemIfNotEmpty("gender", graphData.Gender);
            //dictionary.AddItemIfNotEmpty("figureurl", graphData.Figureurl);
            //dictionary.AddItemIfNotEmpty("figureurl_1", graphData.Figureurl_1);
            //dictionary.AddItemIfNotEmpty("figureurl_2", graphData.Figureurl_2);
            //dictionary.AddItemIfNotEmpty("figureurl_qq_1", graphData.Figureurl_qq_1);
            //dictionary.AddItemIfNotEmpty("figureurl_qq_2", graphData.Figureurl_qq_2);
            //dictionary.AddItemIfNotEmpty("is_yellow_vip", graphData.Is_yellow_vip.ToString());
            //dictionary.AddItemIfNotEmpty("vip", graphData.Vip.ToString());
            //dictionary.AddItemIfNotEmpty("level", graphData.Level.ToString());
            return(dictionary);
        }
        public void TestGetResponseAsync3_Error_NoThrow()
        {
            using (CancellationTokenSource cts = new CancellationTokenSource())
            {
                cts.CancelAfter(TimeSpan.FromSeconds(2));

                WebRequest request = WebRequest.CreateHttp("http://httpbin.org/status/404");
                request.Method = "GET";

                WebResponse  response     = null;
                MemoryStream outputStream = new MemoryStream();

                Task testTask =
                    WebRequestExtensions.GetResponseAsync(request, false, cts.Token)
                    .Then(task =>
                {
                    response = task.Result;
                    return(CopyToAsync(task.Result.GetResponseStream(), outputStream));
                });

                testTask.Wait();
                Assert.AreEqual(TaskStatus.RanToCompletion, testTask.Status);
                Console.Error.WriteLine(Encoding.UTF8.GetString(outputStream.GetBuffer()));

                Assert.IsInstanceOfType(response, typeof(HttpWebResponse));
                Assert.AreEqual(HttpStatusCode.NotFound, ((HttpWebResponse)response).StatusCode);
            }
        }
Esempio n. 6
0
        protected override string QueryAccessToken(Uri returnUrl, string authorizationCode)
        {
            var dict = (new Dictionary <string, string>
            {
                {
                    "client_id",
                    this.appId
                },

                {
                    "redirect_uri",
                    returnUrl.AbsoluteUri.UrlEncode()
                },

                {
                    "client_secret",
                    this.appSecret
                },

                {
                    "code",
                    authorizationCode
                },

                {
                    "scope",
                    "email"
                }
            });
            var text   = WebRequestExtensions.Post(TokenEndpoint, dict);
            var result = JsonHelper.Deserialize <dynamic>(text);

            uid = result["uid"].ToString();
            return(result["access_token"]);
        }
Esempio n. 7
0
        public static void TestAsyncDown()
        {
            var request = WebRequest.Create("https://www.baidu.com/");

            //WebRequestExtensions.DownloadStringAsync(request).Subscribe(str=>Console.WriteLine(str.Substring(0,10)),e=>Console.WriteLine(e.Message));
            WebRequestExtensions.DownLoadTask(request).Subscribe(Console.WriteLine, e => Console.WriteLine(e.Message));
            //Console.WriteLine(str);
        }
Esempio n. 8
0
        private string GetOpenid(string accessToken)
        {
            var requestUri = UrlUtility.CombineQueryString(OpenIdEndpoint, accessToken);
            var text       = WebRequestExtensions.Get(requestUri);
            var result     = string.Empty;
            var regex      = new Regex("\"openid\":\"(.*?)\"");

            if (regex.IsMatch(text))
            {
                result = regex.Match(text).Groups[1].Value;
            }
            return(result);
        }
Esempio n. 9
0
        public long UploadFile(string path, string url, string contentType = "form-data")
        {
            // Build request
            var request = (HttpWebRequest)WebRequest.Create(url);

            request.Method = WebRequestMethods.Http.Post;
            request.AllowWriteStreamBuffering = false;
            request.ContentType = contentType;
            string fileName = Path.GetFileName(path);

            request.Headers["Content-Disposition"] = string.Format("attachment; filename=\"{0}\"", fileName);

            try
            {
                // Open source file
                using (var fileStream = File.OpenRead(path))
                {
                    // Set content length based on source file length
                    request.ContentLength = fileStream.Length;

                    // Get the request stream with the default timeout
                    using (var requestStream = WebRequestExtensions.GetRequestStreamWithTimeout(request, 30000))
                    {
                        // Upload the file with no timeout
                        fileStream.CopyTo(requestStream);
                    }
                }

                // Get response with the default timeout, and parse the response body
                using (var response = WebRequestExtensions.GetResponseWithTimeout(request, 30000))
                    using (var responseStream = response.GetResponseStream())
                        using (var reader = new StreamReader(responseStream))
                        {
                            string json = reader.ReadToEnd();
                            var    j    = JObject.Parse(json);
                            return(j.Value <long>("Id"));
                        }
            }
            catch (WebException ex)
            {
                if (ex.Status == WebExceptionStatus.Timeout)
                {
                    //LogError(ex, "Timeout while uploading '{0}'", fileName);
                }
                else
                {
                    //LogError(ex, "Error while uploading '{0}'", fileName);
                }
                throw;
            }
        }
Esempio n. 10
0
        protected override string QueryAccessToken(Uri returnUrl, string authorizationCode)
        {
            var dict = new Dictionary <string, string>
            {
                { "grant_type", "authorization_code" },
                { "client_id", this.appId },
                { "redirect_uri", returnUrl.AbsoluteUri },
                { "client_secret", this.appSecret },
                { "code", authorizationCode }
            };
            var text   = WebRequestExtensions.Get(TokenEndpoint, dict);
            var result = JsonHelper.Deserialize <dynamic>(text);

            return(result["access_token"]);
        }
Esempio n. 11
0
        protected override IDictionary <string, string> GetUserData(string accessToken)
        {
            var dict = new Dictionary <string, string>();

            dict["access_token"] = accessToken;
            dict["format"]       = "json";
            var json   = WebRequestExtensions.Get(UserInfoEndpoint, dict);
            var result = JsonHelper.Deserialize <dynamic>(json);

            var dictionary = new Dictionary <string, string>();

            dictionary.AddItemIfNotEmpty("id", result["uid"] as string);
            dictionary.AddItemIfNotEmpty("username", result["name"] as string);
            dictionary.AddItemIfNotEmpty("name", result["name"] as string);
            return(dictionary);
        }
Esempio n. 12
0
        protected override IDictionary <string, string> GetUserData(string accessToken)
        {
            var openid = GetOpenid(accessToken);
            var url    = (UserInfoEndpoint + "?" + accessToken)
                         .AddQueryParam("openid", openid)
                         .AddQueryParam("lang", "zh_CN");

            var text      = WebRequestExtensions.Get(url);
            var graphData = JsonHelper.Deserialize <WeChatGraphData>(text);

            var dictionary = new Dictionary <string, string>();

            dictionary.AddItemIfNotEmpty("id", openid);
            dictionary.AddItemIfNotEmpty("username", graphData.nickname);
            dictionary.AddItemIfNotEmpty("name", graphData.nickname);
            return(dictionary);
        }
Esempio n. 13
0
        protected override IDictionary <string, string> GetUserData(string accessToken)
        {
            var dict = new Dictionary <string, string>();

            dict["access_token"] = accessToken;
            dict["id"]           = NeteaseModel.Uid;
            var text      = WebRequestExtensions.Get(UserInfoEndpoint, dict);
            var graphData = JsonHelper.Deserialize <NeteaseGraphData>(text);

            var dictionary = new Dictionary <string, string>();

            dictionary.AddItemIfNotEmpty("id", graphData.Id);
            dictionary.AddItemIfNotEmpty("username", graphData.Id);
            dictionary.AddItemIfNotEmpty("name", graphData.Screen_Name);
            dictionary.AddItemIfNotEmpty("url", graphData.Url);
            dictionary.AddItemIfNotEmpty("gender", graphData.Gender.ToString());
            return(dictionary);
        }
Esempio n. 14
0
        protected override IDictionary <string, string> GetUserData(string accessToken)
        {
            var dict = new Dictionary <string, string> {
                { "access_token", accessToken }
            };
            dynamic graphData;
            var     text = WebRequestExtensions.Get(UserInfoEndpoint, dict);

            graphData = JsonHelper.Deserialize <dynamic>(text);

            var dictionary = new Dictionary <string, string>();

            dictionary.AddItemIfNotEmpty("id", graphData["response"]["id"].ToString() as string);
            dictionary.AddItemIfNotEmpty("username", graphData["response"]["id"] as string);
            dictionary.AddItemIfNotEmpty("name", graphData["response"]["name"] as string);
            dictionary.AddItemIfNotEmpty("url", graphData["response"]["avatar"][1]["url"] as string);
            return(dictionary);
        }
Esempio n. 15
0
        protected override string QueryAccessToken(Uri returnUrl, string authorizationCode)
        {
            var dict = new Dictionary <string, string>();

            dict["code"]          = authorizationCode;
            dict["client_id"]     = this.appId;
            dict["client_secret"] = this.appSecret;
            dict["redirect_uri"]  = returnUrl.AbsoluteUri.UrlEncode();
            dict["grant_type"]    = "authorization_code";
            var json = WebRequestExtensions.Post(TokenEndpoint, dict);

            if (!string.IsNullOrEmpty(json))
            {
                NeteaseModel = JsonHelper.Deserialize <NeteaseModel>(json);
                return(NeteaseModel.Access_token);
            }
            throw new HttpException(500, "Get AccessToken failed!");
        }
        public void TestGetResponseAsync1()
        {
            WebRequest request = WebRequest.CreateHttp("http://httpbin.org/get");

            request.Method = "GET";

            MemoryStream outputStream = new MemoryStream();

            Task testTask =
                WebRequestExtensions.GetResponseAsync(request)
                .Then(task => StreamExtensions.CopyToAsync(task.Result.GetResponseStream(), outputStream));

            testTask.Wait();
            Assert.AreEqual(TaskStatus.RanToCompletion, testTask.Status);
            Console.Error.WriteLine(Encoding.UTF8.GetString(outputStream.GetBuffer()));

            GetData getData = JsonConvert.DeserializeObject <GetData>(Encoding.UTF8.GetString(outputStream.GetBuffer()));

            Assert.AreEqual(request.RequestUri.OriginalString, getData.url);
        }
Esempio n. 17
0
        protected override IDictionary <string, string> GetUserData(string accessToken)
        {
            var dict = new Dictionary <string, string>();

            dict["access_token"] = accessToken;
            dict["uid"]          = uid;
            var result     = WebRequestExtensions.Get(UserData, dict);
            var graphData  = JsonHelper.Deserialize <SinaGraphData>(result);
            var dictionary = new Dictionary <string, string>();

            dictionary.AddItemIfNotEmpty("id", graphData.Id);
            dictionary.AddItemIfNotEmpty("username", graphData.Screen_Name);
            dictionary.AddItemIfNotEmpty("name", graphData.Name);
            //foreach (var item in res)
            //{
            //    dictionary.AddItemIfNotEmpty(item.Key as string, item.Value.ToString() as string);
            //}

            return(dictionary);
        }
Esempio n. 18
0
    public static void PutTokenInUrl(ref HttpWebRequest req)
    {
        string actualUrl   = req.RequestUri.ToString();
        string modifiedUrl = actualUrl;

        if (req.RequestUri.Query == null || req.RequestUri.Query.Length == 0) // There is no query (?param=value&param2=value2..) already set in the url
        {
            modifiedUrl += "?";
            modifiedUrl += GameManager.Instance.GetApiManager().GetApiKeyParamName() + "=" + GameManager.Instance.GetApiManager().GetApiToken();
        }
        else
        {
            modifiedUrl += "&";
            modifiedUrl += GameManager.Instance.GetApiManager().GetApiKeyParamName() + "=" + GameManager.Instance.GetApiManager().GetApiToken();
        }

        // We clone the actual request because we can't simply redefine uri after declaring HttpWebRequest
        HttpWebRequest reqWithToken = WebRequestExtensions.CloneRequest(req, new Uri(modifiedUrl));

        req = reqWithToken;
    }
        public void TestGetResponseAsync3_Success_Throw()
        {
            using (CancellationTokenSource cts = new CancellationTokenSource())
            {
                cts.CancelAfter(TimeSpan.FromSeconds(2));

                WebRequest request = WebRequest.CreateHttp("http://httpbin.org/get");
                request.Method = "GET";

                MemoryStream outputStream = new MemoryStream();

                Task testTask =
                    WebRequestExtensions.GetResponseAsync(request, true, cts.Token)
                    .Then(task => CopyToAsync(task.Result.GetResponseStream(), outputStream));

                testTask.Wait();
                Assert.AreEqual(TaskStatus.RanToCompletion, testTask.Status);
                Console.Error.WriteLine(Encoding.UTF8.GetString(outputStream.GetBuffer()));

                GetData getData = JsonConvert.DeserializeObject <GetData>(Encoding.UTF8.GetString(outputStream.GetBuffer()));
                Assert.AreEqual(request.RequestUri.OriginalString, getData.url);
            }
        }
        public void TestGetResponseAsync3_Error_Throw()
        {
            using (CancellationTokenSource cts = new CancellationTokenSource())
            {
                cts.CancelAfter(TimeSpan.FromSeconds(2));

                WebRequest request = WebRequest.CreateHttp("http://httpbin.org/status/404");
                request.Method = "GET";

                MemoryStream outputStream = new MemoryStream();

                Task testTask = null;

                try
                {
                    testTask =
                        WebRequestExtensions.GetResponseAsync(request, true, cts.Token)
                        .Then(task => CopyToAsync(task.Result.GetResponseStream(), outputStream));

                    testTask.Wait();
                    Assert.Fail("Expected a WebException wrapped in an AggregateException");
                }
                catch (AggregateException ex)
                {
                    Assert.IsNotNull(testTask);
                    Assert.AreEqual(TaskStatus.Faulted, testTask.Status);
                    Assert.AreEqual(1, ex.InnerExceptions.Count);
                    Assert.IsInstanceOfType(ex.InnerExceptions[0], typeof(WebException));

                    WebException webException = (WebException)ex.InnerExceptions[0];
                    Assert.IsInstanceOfType(webException.Response, typeof(HttpWebResponse));

                    HttpWebResponse response = (HttpWebResponse)webException.Response;
                    Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode);
                }
            }
        }
 public void TestGetResponseAsync1_NullRequest()
 {
     WebRequestExtensions.GetResponseAsync(null);
 }
 public void TestGetResponseAsync3_NullRequest_Throw()
 {
     WebRequestExtensions.GetResponseAsync(null, true, CancellationToken.None);
 }
 public void TestGetRequestStreamAsync_NullRequest()
 {
     WebRequestExtensions.GetRequestStreamAsync(null);
 }
 public void TestGetResponseAsync2_NullRequest()
 {
     WebRequestExtensions.GetResponseAsync(null, CancellationToken.None);
 }