Замена WebClient в .NET Compact Framework - C#

Узнай цену своей работы

Формулировка задачи:

Я использую WebClient для авторизации при помощи куки на веб-сервисе, но в Compact Framework WebClient не поддерживается.
class CookieWebClient : WebClient
{
    public CookieContainer CookieContainer { get; private set; }

    public CookieWebClient()
    {
        this.CookieContainer = new CookieContainer();
    }

    public CookieWebClient(CookieContainer cookieContainer)
    {
        this.CookieContainer = cookieContainer;
    }
 
    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address) as HttpWebRequest;
        if (request == null) return base.GetWebRequest(address);            
        request.Timeout = 30000;
        request.CookieContainer = CookieContainer;
        return request;
    }
}
Чем можно заменить этот код, чтобы можно было принять куки и продолжать работать с веб-сервисом, авторизовавшись?

Решение задачи: «Замена WebClient в .NET Compact Framework»

textual
Листинг программы
public static class HTTPRequester
    {
        public static HttpWebRequest CreateRequest(string uri, string method)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
 
            request.Method = method;
            request.CookieContainer = new CookieContainer();
            request.Timeout = System.Threading.Timeout.Infinite;
 
            return request;
        }
 
        public static HttpWebResponse CreateResponse(HttpWebRequest request)
        {
            HttpWebResponse response = null;
 
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                response = (HttpWebResponse)ex.Response;
                if (response == null)
                    throw;
            }
            finally
            {
                if (response != null)
                {
                    if (response.StatusCode != HttpStatusCode.OK)
                        throw new WebException("Response answer is not OK");
 
                    if ((int)response.StatusCode >= 500)
                    {
                        response.Close();
                        throw new WebException(string.Format("Client received error response from server. Status code: {0}.", response.StatusCode), WebExceptionStatus.ReceiveFailure);
                    }
                }
            }
 
            return response;
        }
 
        public static HttpWebResponse CreateResponse(HttpWebRequest request, out string responseData)
        {
            HttpWebResponse response = CreateResponse(request);
            StringBuilder sb = new StringBuilder();
            using (var stream = response.GetResponseStream())
            {
                int readCount;
                int count = 1024;
                byte[] buffer = new byte[count];
                while ((readCount = stream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    sb.Append(Encoding.UTF8.GetString(buffer, 0, readCount));
                }
            }
 
            responseData = sb.ToString();
            return response;
        }
 
        public static HttpWebResponse CreateGETRequest(string uri, Cookie cookie, out string responseData)
        {
            HttpWebRequest request = CreateRequest(uri, WebRequestMethods.Http.Get);
            request.CookieContainer.Add(cookie);
            return CreateResponse(request, out responseData);
        }
 
        public static HttpWebResponse CreatePOSTRequest(string uri, string contentType, string postBody, out string responseData)
        {
            HttpWebRequest request = CreateRequest(uri, WebRequestMethods.Http.Post);
            request.ContentType = contentType;
 
            using (var sw = new StreamWriter(request.GetRequestStream()))
            {
                sw.Write(postBody);
                sw.Flush();
                sw.Close();
            }
 
            return CreateResponse(request, out responseData);
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы