예제 #1
0
        public void HttpRequestParamTest()
        {
            HttpRequest httpRequest = new HttpRequest();

            httpRequest.SetCommonUrlParameters();
            httpRequest.AddUrlParameter("key", "value");
            Assert.Equal("value", httpRequest.UrlParameters["key"]);
            Assert.Equal(5, httpRequest.UrlParameters.Count);

            httpRequest.Headers.Add("testHeader", "test");
            Assert.Equal("test", httpRequest.Headers["testHeader"]);

            httpRequest.ConnectTimeout = 10000;
            Assert.Equal(10000, httpRequest.ConnectTimeout);

            httpRequest.Content = new byte[] { };
            Assert.NotNull(httpRequest.GetHttpContentString());

            httpRequest.ContentType = FormatType.Json;
            Assert.Equal(FormatType.Json, httpRequest.ContentType);

            httpRequest.Encoding = "UTF-8";
            Assert.Equal("UTF-8", httpRequest.Encoding);

            httpRequest.Method = MethodType.Post;
            Assert.Equal(MethodType.Post, httpRequest.Method);

            httpRequest.ReadTimeout = 20000;
            Assert.Equal(20000, httpRequest.ReadTimeout);

            httpRequest.Url = "www.test.com";
            Assert.Equal("www.test.com", httpRequest.Url);
        }
        private IAlibabaCloudCredentials GetNewSessionCredentials(IConnClient client)
        {
            HttpRequest httpRequest = new HttpRequest();

            httpRequest.SetCommonUrlParameters();
            httpRequest.AddUrlParameter("Action", "GenerateSessionAccessKey");
            httpRequest.AddUrlParameter("Format", "JSON");
            httpRequest.AddUrlParameter("Version", "2015-04-01");
            httpRequest.AddUrlParameter("DurationSeconds", durationSeconds.ToString());
            httpRequest.AddUrlParameter("AccessKeyId", PublicKeyId);
            httpRequest.AddUrlParameter("RegionId", regionId);
            string strToSign = ParameterHelper.ComposeStringToSign(MethodType.Get, httpRequest.UrlParameters);
            String signature = ParameterHelper.SignString(strToSign, PrivateKey + "&");

            httpRequest.AddUrlParameter("Signature", signature);
            httpRequest.Method         = MethodType.Get;
            httpRequest.ConnectTimeout = connectTimeout;
            httpRequest.ReadTimeout    = readTimeout;
            httpRequest.Url            = ParameterHelper.ComposeUrl("sts.aliyuncs.com", httpRequest.UrlParameters, "https");
            HttpResponse httpResponse = client.DoAction(httpRequest);

            if (httpResponse != null && httpResponse.Status != 200)
            {
                throw new CredentialException("Failed to get session credentials.HttpCode=" + httpResponse.Status);
            }

            Debug.Assert(httpResponse != null, "httpResponse != null");
            dynamic contentObj = JsonConvert.DeserializeObject <dynamic>(httpResponse.GetHttpContentString());
            string  sessionAccessKeyId;
            string  sessionAccessKeySecret;
            string  expirationStr;

            try
            {
                sessionAccessKeyId     = contentObj.SessionAccessKey.SessionAccessKeyId;
                sessionAccessKeySecret = contentObj.SessionAccessKey.SessionAccessKeySecret;
                expirationStr          = contentObj.SessionAccessKey.Expiration;
            }
            catch
            {
                throw new CredentialException("Invalid json got from service.");
            }
            expirationStr = expirationStr.Replace('T', ' ').Replace('Z', ' ');
            var  dt         = Convert.ToDateTime(expirationStr);
            long expiration = dt.GetTimeMillis();

            return(new RsaKeyPairCredential(sessionAccessKeyId, sessionAccessKeySecret, expiration, this));
        }