示例#1
0
        /// <summary>
        /// Post the parameters "x-www-form-urlencoded"
        /// </summary>
        /// <param name="webRequest"></param>
        public static void UploadFormUrlEncoded(HttpWebRequest webRequest, IDictionary <string, object> parameters)
        {
            webRequest.ContentType = "application/x-www-form-urlencoded";
            string urlEncoded = NetworkHelper.GenerateQueryParameters(parameters);

            byte[] data = Encoding.UTF8.GetBytes(urlEncoded);
            using (var requestStream = webRequest.GetRequestStream()) {
                requestStream.Write(data, 0, data.Length);
            }
        }
示例#2
0
        /// <summary>
        /// Make the actual OAuth request, all oauth parameters are passed as header (default) and the others are placed in the url or post data.
        /// Any additional parameters added after the Sign call are not in the signature, this could be by design!
        /// </summary>
        /// <param name="method"></param>
        /// <param name="requestURL"></param>
        /// <param name="headers"></param>
        /// <param name="parameters"></param>
        /// <param name="postData">IBinaryParameter</param>
        /// <returns>Response from server</returns>
        private string MakeRequest(HTTPMethod method, string requestURL, IDictionary <string, string> headers, IDictionary <string, object> parameters, IBinaryContainer postData)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }
            IDictionary <string, object> requestParameters;
            // Add oAuth values as HTTP headers, if this is allowed
            StringBuilder authHeader = null;

            if (UseHTTPHeadersForAuthorization)
            {
                authHeader        = new StringBuilder();
                requestParameters = new Dictionary <string, object>();
                foreach (string parameterKey in parameters.Keys)
                {
                    if (parameterKey.StartsWith(OAUTH_PARAMETER_PREFIX))
                    {
                        authHeader.AppendFormat(CultureInfo.InvariantCulture, "{0}=\"{1}\", ", parameterKey, UrlEncode3986(string.Format("{0}", parameters[parameterKey])));
                    }
                    else if (!requestParameters.ContainsKey(parameterKey))
                    {
                        requestParameters.Add(parameterKey, parameters[parameterKey]);
                    }
                }
                // Remove trailing comma and space and add it to the headers
                if (authHeader.Length > 0)
                {
                    authHeader.Remove(authHeader.Length - 2, 2);
                }
            }
            else
            {
                requestParameters = parameters;
            }

            if (HTTPMethod.GET == method || postData != null)
            {
                if (requestParameters.Count > 0)
                {
                    // Add the parameters to the request
                    requestURL += "?" + NetworkHelper.GenerateQueryParameters(requestParameters);
                }
            }
            // Create webrequest
            HttpWebRequest webRequest = NetworkHelper.CreateWebRequest(requestURL);

            webRequest.Method = method.ToString();
            webRequest.ServicePoint.Expect100Continue = false;
            webRequest.UserAgent = _userAgent;
            webRequest.Timeout   = 100000;

            if (UseHTTPHeadersForAuthorization && authHeader != null)
            {
                LOG.DebugFormat("Authorization: OAuth {0}", authHeader);
                webRequest.Headers.Add("Authorization: OAuth " + authHeader);
            }

            if (headers != null)
            {
                foreach (string key in headers.Keys)
                {
                    webRequest.Headers.Add(key, headers[key]);
                }
            }

            if ((HTTPMethod.POST == method || HTTPMethod.PUT == method) && postData == null && requestParameters.Count > 0)
            {
                if (UseMultipartFormData)
                {
                    NetworkHelper.WriteMultipartFormData(webRequest, requestParameters);
                }
                else
                {
                    StringBuilder form = new StringBuilder();
                    foreach (string parameterKey in requestParameters.Keys)
                    {
                        if (parameters[parameterKey] is IBinaryContainer)
                        {
                            IBinaryContainer binaryParameter = parameters[parameterKey] as IBinaryContainer;
                            form.AppendFormat(CultureInfo.InvariantCulture, "{0}={1}&", UrlEncode3986(parameterKey), UrlEncode3986(binaryParameter.ToBase64String(Base64FormattingOptions.None)));
                        }
                        else
                        {
                            form.AppendFormat(CultureInfo.InvariantCulture, "{0}={1}&", UrlEncode3986(parameterKey), UrlEncode3986(string.Format("{0}", parameters[parameterKey])));
                        }
                    }
                    // Remove trailing &
                    if (form.Length > 0)
                    {
                        form.Remove(form.Length - 1, 1);
                    }
                    webRequest.ContentType = "application/x-www-form-urlencoded";
                    byte[] data = Encoding.UTF8.GetBytes(form.ToString());
                    using (var requestStream = webRequest.GetRequestStream()) {
                        requestStream.Write(data, 0, data.Length);
                    }
                }
            }
            else if (postData != null)
            {
                postData.Upload(webRequest);
            }
            else
            {
                webRequest.ContentLength = 0;
            }

            string responseData;

            try {
                responseData = NetworkHelper.GetResponse(webRequest);
                LOG.DebugFormat("Response: {0}", responseData);
            } catch (Exception ex) {
                LOG.Error("Couldn't retrieve response: ", ex);
                throw;
            } finally {
                webRequest = null;
            }

            return(responseData);
        }