public void Create_GetRequest_Correct()
        {
            var request = _factory.Create(
                "http://fakeurl.com",
                new Dictionary <string, object>()
            {
                { "param", "test" }
            },
                "GET");

            Assert.IsNotNull(request);
            Assert.AreEqual("http://fakeurl.com/", request.RequestUri.AbsoluteUri);
            Assert.AreEqual(-1, request.ContentLength);
        }
        private (IHttpWebRequest request, UriBuilder uri, SolrCacheEntity cache) PrepareGetWebRequest(string relativeUrl, IEnumerable <KeyValuePair <string, string> > parameters)
        {
            var u = new UriBuilder(serverURL);

            u.Path += relativeUrl;
            u.Query = GetQuery(parameters);

            var request = HttpWebRequestFactory.Create(u.Uri);

            request.Method    = HttpWebRequestMethod.GET;
            request.KeepAlive = true;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

            var cached = Cache[u.Uri.ToString()];

            if (cached != null)
            {
                request.Headers.Add(HttpRequestHeader.IfNoneMatch, cached.ETag);
            }
            if (Timeout > 0)
            {
                request.ReadWriteTimeout = Timeout;
                request.Timeout          = Timeout;
            }
            return(request, u, cached);
        }
        private IHttpWebRequest PreparePostStreamWebRequest(string relativeUrl, string contentType, Stream content, IEnumerable <KeyValuePair <string, string> > parameters)
        {
            var u = new UriBuilder(serverURL);

            u.Path += relativeUrl;
            u.Query = GetQuery(parameters);

            var request = HttpWebRequestFactory.Create(u.Uri);

            request.Method    = HttpWebRequestMethod.POST;
            request.KeepAlive = true;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

            if (Timeout > 0)
            {
                request.ReadWriteTimeout = Timeout;
                request.Timeout          = Timeout;
            }
            if (contentType != null)
            {
                request.ContentType = contentType;
            }

            request.ContentLength   = content.Length;
            request.ProtocolVersion = HttpVersion.Version11;
            return(request);
        }
示例#4
0
        public (IHttpWebRequest request, string queryString) PrepareGet(string relativeUrl, IEnumerable <KeyValuePair <string, string> > parameters)
        {
            var u = new UriBuilder(serverUrl);

            u.Path += relativeUrl;
            var request = HttpWebRequestFactory.Create(u.Uri);

            request.Method      = HttpWebRequestMethod.POST;
            request.ContentType = "application/x-www-form-urlencoded";

            var param = new List <KeyValuePair <string, string> >();

            if (parameters != null)
            {
                param.AddRange(parameters);
            }

            param.Add(KV.Create("wt", "xml"));
            var qs = string.Join("&", param
                                 .Select(kv => string.Format("{0}={1}", WebUtility.UrlEncode(kv.Key), WebUtility.UrlEncode(kv.Value)))
                                 .ToArray());

            request.ContentLength   = Encoding.UTF8.GetByteCount(qs);
            request.ProtocolVersion = HttpVersion.Version11;
            request.KeepAlive       = true;

            return(request, qs);
        }
示例#5
0
        public IHttpRequest Resource(string resource, Action <HttpHeader> httpHeaderOptions)
        {
            var request    = HttpWebRequestFactory.Create(new Uri(Uri, resource));
            var httpHeader = new HttpHeader(request, this);

            httpHeaderOptions?.Invoke(httpHeader);
            return(new HttpRequest(request, this));
        }
示例#6
0
        public string Get(string relativeUrl, IEnumerable <KeyValuePair <string, string> > parameters)
        {
            var u = new UriBuilder(serverURL);

            u.Path += relativeUrl;
            u.Query = GetQuery(parameters);

            var request = HttpWebRequestFactory.Create(u.Uri);

            request.Method    = HttpWebRequestMethod.GET;
            request.KeepAlive = true;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

            var cached = Cache[u.Uri.ToString()];

            if (cached != null)
            {
                request.Headers.Add(HttpRequestHeader.IfNoneMatch, cached.ETag);
            }
            if (Timeout > 0)
            {
                request.ReadWriteTimeout = Timeout;
                request.Timeout          = Timeout;
            }
            if (Certificate != null)
            {
                request.ProtocolVersion = HttpVersion.Version10;
                request.PreAuthenticate = true;
                request.ClientCertificates.Add(Certificate);
                ServicePointManager.Expect100Continue = true;
                ServicePointManager.SecurityProtocol  = SecurityProtocolType.Ssl3;
                ServicePointManager.ServerCertificateValidationCallback += AcceptSelfSignedCertificate;
            }
            try {
                var response = GetResponse(request);
                if (response.ETag != null)
                {
                    Cache.Add(new SolrCacheEntity(u.Uri.ToString(), response.ETag, response.Data));
                }
                return(response.Data);
            } catch (WebException e) {
                if (e.Response != null)
                {
                    using (e.Response) {
                        var r = new HttpWebResponseAdapter(e.Response);
                        if (r.StatusCode == HttpStatusCode.NotModified)
                        {
                            return(cached.Data);
                        }
                        using (var s = e.Response.GetResponseStream())
                            using (var sr = new StreamReader(s)) {
                                throw new SolrConnectionException(sr.ReadToEnd(), e, u.Uri.ToString());
                            }
                    }
                }
                throw new SolrConnectionException(e, u.Uri.ToString());
            }
        }
示例#7
0
        public string Get(string relativeUrl, IEnumerable <KeyValuePair <string, string> > parameters)
        {
            var u = new UriBuilder(serverURL);

            u.Path += relativeUrl;
            u.Query = GetQuery(parameters);

            var request = HttpWebRequestFactory.Create(u.Uri);

            request.Method    = HttpWebRequestMethod.GET;
            request.KeepAlive = true;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

            var cached = Cache[u.Uri.ToString()];

            if (cached != null)
            {
                request.Headers.Add(HttpRequestHeader.IfNoneMatch, cached.ETag);
            }
            if (Timeout > 0)
            {
                request.ReadWriteTimeout = Timeout;
                request.Timeout          = Timeout;
            }
            try {
                var response = GetResponse(request);
                if (response.ETag != null)
                {
                    Cache.Add(new SolrCacheEntity(u.Uri.ToString(), response.ETag, response.Data));
                }
                return(response.Data);
            } catch (WebException e) {
                var msg = e.Message;

                if (e.Response != null)
                {
                    HttpStatusCode solrHttpStatusCode;
                    using (e.Response)
                    {
                        var r = new HttpWebResponseAdapter(e.Response);
                        solrHttpStatusCode = r.StatusCode;
                        if (solrHttpStatusCode == HttpStatusCode.NotModified)
                        {
                            return(cached.Data);
                        }

                        using (var s = e.Response.GetResponseStream())
                            using (var sr = new StreamReader(s))
                                msg = sr.ReadToEnd();
                    }

                    throw new SolrConnectionException(msg, e, u.Uri.ToString(), solrHttpStatusCode);
                }

                throw new SolrConnectionException(msg, e, u.Uri.ToString());
            }
        }
        /// <summary>
        /// Constructs a web request to create a new container.
        /// </summary>
        /// <param name="uri">A <see cref="System.Uri"/> specifying the absolute URI to the container.</param>
        /// <param name="timeout">An integer specifying the server timeout interval.</param>
        /// <param name="useVersionHeader">A flag indicating whether to set the x-ms-version HTTP header.</param>
        /// <param name="operationContext">An <see cref="OperationContext"/> object that represents the context for the current operation.</param>
        /// <param name="accessType">An <see cref="BlobContainerPublicAccessType"/> object that specifies whether data in the container may be accessed publicly and the level of access.</param>
        /// <returns>A <see cref="System.Net.HttpWebRequest"/> object.</returns>
        public static HttpWebRequest Create(Uri uri, int?timeout, bool useVersionHeader, OperationContext operationContext, BlobContainerPublicAccessType accessType)
        {
            UriQueryBuilder containerBuilder = GetContainerUriQueryBuilder();
            HttpWebRequest  request          = HttpWebRequestFactory.Create(uri, timeout, containerBuilder, useVersionHeader, operationContext);

            if (accessType != BlobContainerPublicAccessType.Off)
            {
                request.Headers.Add(Constants.HeaderConstants.ContainerPublicAccessType, accessType.ToString().ToLower(CultureInfo.InvariantCulture));
            }

            return(request);
        }
示例#9
0
        public string PostStream(string relativeUrl, string contentType, Stream content, IEnumerable <KeyValuePair <string, string> > parameters)
        {
            var u = new UriBuilder(serverURL);

            u.Path += relativeUrl;
            u.Query = GetQuery(parameters);

            var request = HttpWebRequestFactory.Create(u.Uri);

            request.Method    = HttpWebRequestMethod.POST;
            request.KeepAlive = true;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

            if (Timeout > 0)
            {
                request.ReadWriteTimeout = Timeout;
                request.Timeout          = Timeout;
            }
            if (contentType != null)
            {
                request.ContentType = contentType;
            }

            request.ContentLength   = content.Length;
            request.ProtocolVersion = HttpVersion.Version11;

            if (Certificate != null)
            {
                request.ProtocolVersion = HttpVersion.Version10;
                request.PreAuthenticate = true;
                request.ClientCertificates.Add(Certificate);
                ServicePointManager.Expect100Continue = true;
                ServicePointManager.SecurityProtocol  = SecurityProtocolType.Ssl3;
                ServicePointManager.ServerCertificateValidationCallback += AcceptSelfSignedCertificate;
            }

            try {
                using (var postStream = request.GetRequestStream()) {
                    CopyTo(content, postStream);
                }
                return(GetResponse(request).Data);
            } catch (WebException e) {
                var msg = e.Message;
                if (e.Response != null)
                {
                    using (var s = e.Response.GetResponseStream())
                        using (var sr = new StreamReader(s))
                            msg = sr.ReadToEnd();
                }
                throw new SolrConnectionException(msg, e, request.RequestUri.ToString());
            }
        }
示例#10
0
        /// <summary>
        /// Constructs a web request to create a new share.
        /// </summary>
        /// <param name="uri">The absolute URI to the share.</param>
        /// <param name="properties">Properties to set on the share.</param>
        /// <param name="timeout">The server timeout interval.</param>
        /// <param name="useVersionHeader">A boolean value indicating whether to set the <i>x-ms-version</i> HTTP header.</param>
        /// <param name="operationContext">An <see cref="OperationContext" /> object for tracking the current operation.</param>
        /// <returns>A web request to use to perform the operation.</returns>
        public static HttpWebRequest Create(Uri uri, FileShareProperties properties, int?timeout, bool useVersionHeader, OperationContext operationContext)
        {
            UriQueryBuilder shareBuilder = GetShareUriQueryBuilder();

            HttpWebRequest request = HttpWebRequestFactory.Create(uri, timeout, shareBuilder, useVersionHeader, operationContext);

            if (properties != null && properties.Quota.HasValue)
            {
                request.AddOptionalHeader(Constants.HeaderConstants.ShareQuota, properties.Quota);
            }

            return(request);
        }
示例#11
0
        public string PostStream(string relativeUrl, string contentType, Stream content, IEnumerable <KeyValuePair <string, string> > parameters)
        {
            var u = new UriBuilder(serverURL);

            u.Path += relativeUrl;
            u.Query = GetQuery(parameters);

            var request = HttpWebRequestFactory.Create(u.Uri);

            request.Method    = HttpWebRequestMethod.POST;
            request.KeepAlive = true;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

            if (Timeout > 0)
            {
                request.ReadWriteTimeout = Timeout;
                request.Timeout          = Timeout;
            }
            if (contentType != null)
            {
                request.ContentType = contentType;
            }

            request.ContentLength   = content.Length;
            request.ProtocolVersion = HttpVersion.Version11;

            try {
                using (var postStream = request.GetRequestStream()) {
                    CopyTo(content, postStream);
                }
                return(GetResponse(request).Data);
            } catch (WebException e) {
                var msg = e.Message;

                if (e.Response != null)
                {
                    HttpStatusCode solrHttpStatusCode;
                    using (e.Response)
                    {
                        using (var s = e.Response.GetResponseStream())
                            using (var sr = new StreamReader(s))
                                msg = sr.ReadToEnd();

                        solrHttpStatusCode = (new HttpWebResponseAdapter(e.Response)).StatusCode;
                    }

                    throw new SolrConnectionException(msg, e, request.RequestUri.ToString(), solrHttpStatusCode);
                }
                throw new SolrConnectionException(msg, e, request.RequestUri.ToString());
            }
        }
示例#12
0
        public string Get(string relativeUrl, IEnumerable <KeyValuePair <string, string> > parameters)
        {
            var u = new UriBuilder(serverURL);

            u.Path += relativeUrl;
            u.Query = GetQuery(parameters);

            var request = HttpWebRequestFactory.Create(u.Uri);

            request.Method    = HttpWebRequestMethod.GET;
            request.KeepAlive = true;

            //Issue request headers to say we can accept a compressed response
            request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");

            var cached = Cache[u.Uri.ToString()];

            if (cached != null)
            {
                request.Headers.Add(HttpRequestHeader.IfNoneMatch, cached.ETag);
            }
            if (Timeout > 0)
            {
                request.ReadWriteTimeout = Timeout;
                request.Timeout          = Timeout;
            }
            try {
                var response = GetResponse(request);
                if (response.ETag != null)
                {
                    Cache.Add(new SolrCacheEntity(u.Uri.ToString(), response.ETag, response.Data));
                }
                return(response.Data);
            } catch (WebException e) {
                if (e.Response != null)
                {
                    var r = new HttpWebResponseAdapter(e.Response);
                    if (r.StatusCode == HttpStatusCode.NotModified)
                    {
                        return(cached.Data);
                    }
                    if (r.StatusCode == HttpStatusCode.BadRequest)
                    {
                        throw new InvalidFieldException(r.StatusDescription, e);
                    }
                }
                throw new SolrConnectionException(e);
            }
        }
        /// <summary>
        /// Constructs a web request to create a new container.
        /// </summary>
        /// <param name="uri">A <see cref="System.Uri"/> specifying the absolute URI to the container.</param>
        /// <param name="timeout">An integer specifying the server timeout interval.</param>
        /// <param name="useVersionHeader">A boolean value indicating whether to set the <i>x-ms-version</i> HTTP header.</param>
        /// <param name="operationContext">An <see cref="OperationContext"/> object that represents the context for the current operation.</param>
        /// <param name="accessType">An <see cref="BlobContainerPublicAccessType"/> object that specifies whether data in the container may be accessed publicly and the level of access.</param>
        /// <returns>A <see cref="System.Net.HttpWebRequest"/> object.</returns>
        public static HttpWebRequest Create(Uri uri, int?timeout, bool useVersionHeader, OperationContext operationContext, BlobContainerPublicAccessType accessType)
        {
            if (accessType == BlobContainerPublicAccessType.Unknown)
            {
                throw new ArgumentException(SR.ArgumentOutOfRangeError, "accessType");
            }

            UriQueryBuilder containerBuilder = GetContainerUriQueryBuilder();
            HttpWebRequest  request          = HttpWebRequestFactory.Create(uri, timeout, containerBuilder, useVersionHeader, operationContext);

            if (accessType != BlobContainerPublicAccessType.Off)
            {
                request.Headers.Add(Constants.HeaderConstants.ContainerPublicAccessType, accessType.ToString().ToLower(CultureInfo.InvariantCulture));
            }

            return(request);
        }
 /// <summary>
 /// Constructs a web request to create a new queue.
 /// </summary>
 /// <param name="uri">A <see cref="System.Uri"/> specifying the absolute URI to the queue.</param>
 /// <param name="timeout">An integer specifying the server timeout interval.</param>
 /// <param name="useVersionHeader">A boolean value indicating whether to set the <i>x-ms-version</i> HTTP header.</param>
 /// <param name="operationContext">An <see cref="OperationContext"/> object that represents the context for the current operation.</param>
 /// <returns>A <see cref="System.Net.HttpWebRequest"/> object.</returns>
 public static HttpWebRequest Create(Uri uri, int?timeout, bool useVersionHeader, OperationContext operationContext)
 {
     return(HttpWebRequestFactory.Create(uri, timeout, null, useVersionHeader, operationContext));
 }
 /// <summary>
 /// Constructs a web request to create a new queue.
 /// </summary>
 /// <param name="uri">The absolute URI to the queue.</param>
 /// <param name="timeout">The server timeout interval.</param>
 /// <param name="operationContext">An <see cref="OperationContext"/> object for tracking the current operation.</param>
 /// <returns>A web request to use to perform the operation.</returns>
 public static HttpWebRequest Create(Uri uri, int?timeout, OperationContext operationContext)
 {
     return(HttpWebRequestFactory.Create(uri, timeout, null, operationContext));
 }
示例#16
0
        /// <summary>
        /// Constructs a web request to create a new container.
        /// </summary>
        /// <param name="uri">The absolute URI to the container.</param>
        /// <param name="timeout">The server timeout interval.</param>
        /// <param name="operationContext">An <see cref="OperationContext"/> object for tracking the current operation.</param>
        /// <returns>A web request to use to perform the operation.</returns>
        public static HttpWebRequest Create(Uri uri, int?timeout, OperationContext operationContext)
        {
            UriQueryBuilder containerBuilder = GetContainerUriQueryBuilder();

            return(HttpWebRequestFactory.Create(uri, timeout, containerBuilder, operationContext));
        }
        /// <summary>
        /// Constructs a web request to create a new directory.
        /// </summary>
        /// <param name="uri">The absolute URI to the directory.</param>
        /// <param name="timeout">The server timeout interval.</param>
        /// <param name="useVersionHeader">A boolean value indicating whether to set the <i>x-ms-version</i> HTTP header.</param>
        /// <param name="operationContext">An <see cref="OperationContext" /> object for tracking the current operation.</param>
        /// <returns>A web request to use to perform the operation.</returns>
        public static HttpWebRequest Create(Uri uri, int?timeout, bool useVersionHeader, OperationContext operationContext)
        {
            UriQueryBuilder directoryBuilder = GetDirectoryUriQueryBuilder();

            return(HttpWebRequestFactory.Create(uri, timeout, directoryBuilder, useVersionHeader, operationContext));
        }