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