win10 應用應該是要有訪問網路,網路現在最多的是使用GET,Post,簡單的使用,可以用網路的資料:獲得部落格的訪問量。

在使用網路,我們需要設定Package.appxmanifest

網路請求使用GET,首先有要訪問的網站

string url = "http://blog.csdn.net/lindexi_gd/article/details/50830924";
//url是我一篇部落格,win10 UWP Hmac,我很多部落格都是讀書筆記

WebRequest是請求基類,需要使用WebRequest.Create(url);

request.Method = "GET";

UWP 的Header設定

 request.Headers["Cookie"] 

接受需要一個函式 AsyncCallback

private void response_callback(IAsyncResult result)

request.BeginGetResponse(response_callback, request);

response_callback接受資訊HttpWebRequest http_web_request = (HttpWebRequest)result.AsyncState;

                WebResponse web_response = http_web_request.EndGetResponse(result);
                using (Stream stream = web_response.GetResponseStream())
                {
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        string content = reader.ReadToEnd();
                    }
                }

我們需要對content進行正則

正則可以看 正則快速

                        Regex regex = new Regex(@"<span class=""link_view"" title=""閱讀次數"">(\d\d\d人閱讀)</span>");
                        string str = regex.Match(content).Result("閱讀:$1");
                        reminder(str);

如果使用UI,直接使用會出現

我們寫函式

        private async void reminder(string str)
        {
            await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                () =>
                {
                    tb.Text += str;
                });
        }

網路很容易就異常

catch (WebException e)
            {
                switch (e.Status)
                {
                    case WebExceptionStatus.CacheEntryNotFound:
                        break;
                    case WebExceptionStatus.ConnectFailure:
                        reminder("ConnectFailure:遠端伺服器連線失敗");
                        break;
                    case WebExceptionStatus.ConnectionClosed:
                        break;
                    case WebExceptionStatus.KeepAliveFailure:
                        break;
                    case WebExceptionStatus.MessageLengthLimitExceeded:
                        reminder("MessageLengthLimitExceeded 網路請求訊息長度受到限制");
                        break;
                    case WebExceptionStatus.NameResolutionFailure:
                        break;
                    case WebExceptionStatus.Pending:
                        reminder("Pending 內部非同步掛起");
                        break;
                    case WebExceptionStatus.PipelineFailure:
                        break;
                    case WebExceptionStatus.ProtocolError:
                        break;
                    case WebExceptionStatus.ProxyNameResolutionFailure:
                        break;
                    case WebExceptionStatus.ReceiveFailure:
                        break;
                    case WebExceptionStatus.RequestCanceled:
                        break;
                    case WebExceptionStatus.RequestProhibitedByCachePolicy:
                        break;
                    case WebExceptionStatus.RequestProhibitedByProxy:
                        break;
                    case WebExceptionStatus.SecureChannelFailure:
                        break;
                    case WebExceptionStatus.SendFailure:
                        break;
                    case WebExceptionStatus.ServerProtocolViolation:
                        break;
                    case WebExceptionStatus.Success:
                        break;
                    case WebExceptionStatus.Timeout:
                        break;
                    case WebExceptionStatus.TrustFailure:
                        break;
                    case WebExceptionStatus.UnknownError:
                        break;
                }
                reminder(e.Message);
            }

post需要把request.Method = "POST";

傳輸在request.BeginGetRequestStream(respeonse_streamCallback, request);

        private void respeonse_streamCallback(IAsyncResult result)
        {
            HttpWebRequest http_web_request = (HttpWebRequest) result.AsyncState;
            using (Stream stream=http_web_request.EndGetRequestStream(result))
            {
                //傳送byte
                string str = "c";
                byte[] buffer = Encoding.UTF8.GetBytes(str);
                stream.Write(buffer,0,buffer.Length);
            }
            http_web_request.BeginGetResponse(response_callback, http_web_request);
        }

簡單方法

            HttpClient http=new HttpClient();
            reminder(await http.GetStringAsync(new Uri(url)));

獲整個物件

            HttpResponseMessage response = await http.GetAsync(new Uri(url));
            reminder(await response.Content.ReadAsStringAsync());
            HttpClient http = new HttpClient();
            HttpStringContent http_string =new HttpStringContent("a");
            HttpResponseMessage response = await http.PostAsync(new Uri(url), http_string);
            string str = await response.Content.ReadAsStringAsync();
            reminder(str);
            HttpClient http = new HttpClient();
            InMemoryRandomAccessStream memory =new InMemoryRandomAccessStream();
            HttpStreamContent stream=new HttpStreamContent(memory);
            HttpResponseMessage response = await http.PostAsync(new Uri(url), stream);
            string str = await response.Content.ReadAsStringAsync();
            reminder(str);
            HttpClient http = new HttpClient();
            InMemoryRandomAccessStream memory = new InMemoryRandomAccessStream();
            HttpStreamContent stream = new HttpStreamContent(memory);
            HttpRequestMessage request=new HttpRequestMessage(HttpMethod.Post,new Uri(url));
            request.Content = stream;
            HttpResponseMessage response = await http.SendRequestAsync(request);
            string str = await response.Content.ReadAsStringAsync();

看到有人說CSDN部落格訪問統計是Cache,如果我們要有很多訪問,可以使用

filter.CacheControl.WriteBehavior = HttpCacheWriteBehavior.NoCache;
await Task.Run(() =>
            {
                reminder("\n");
                WebRequest request = WebRequest.Create(url);
                request.Method = "GET";
                request.Headers["Cookie"] = string.Empty;
                request.BeginGetResponse(response_callback, request);
            });

我把之前寫的一個刷500

cookie可以使用HttpBaseProtocolFilter

設定cookie

            HttpCookie cookie = new HttpCookie("名稱", "blog.csdn.net", "/")
            {
                Value = "a",
            };
            filter.CookieManager.SetCookie(cookie, false);

這寫的不好,我將會寫網路程式設計,這一篇會寫容易的我的部落格授權發在win10.me

原文:http://www.cnblogs.com/linzheng/

部落格:blog.csdn.net/lindexi_gd