Замена 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); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д