win10 UWP GET Post

Cle****-he UID.1073626
2016-03-15 发表

win10 应用应该是要有访问网络,网络现在最多的是使用GET,Post,简单的使用,可以用网络的数据:获得博客的访问量。

在使用网络,我们需要设置Package.appxmanifest

网络请求使用GET,首先有要访问的网站
[mw_shl_code=csharp,true]string url = "http://blog.csdn.net/lindexi_gd/article/details/50830924";
//url是我一篇博客,win10 UWP Hmac,我很多博客都是读书笔记[/mw_shl_code]

WebRequest是请求基类,需要使用WebRequest.Create(url);
[mw_shl_code=csharp,true]request.Method = "GET";[/mw_shl_code]


UWP 的Header设置
[mw_shl_code=csharp,true] request.Headers["Cookie"] [/mw_shl_code]


接受需要一个函数 AsyncCallback
[mw_shl_code=csharp,true]private void response_callback(IAsyncResult result)[/mw_shl_code]

[mw_shl_code=csharp,true]request.BeginGetResponse(response_callback, request);[/mw_shl_code]


response_callback接受信息HttpWebRequest http_web_request = (HttpWebRequest)result.AsyncState;
[mw_shl_code=csharp,true]WebResponse web_response = http_web_request.EndGetResponse(result);
using (Stream stream = web_response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream))
{
string content = reader.ReadToEnd();
}
}[/mw_shl_code]



我们需要对content进行正则

正则可以看 ***链接停止解析***
[mw_shl_code=csharp,true]Regex regex = new Regex(@"<span class=""link_view"" title=""阅读次数"">(\d\d\d人阅读)</span>");
string str = regex.Match(content).Result("阅读:$1");
reminder(str);[/mw_shl_code]

如果使用UI,直接使用会出现
***附件停止解析***


我们写函数
[mw_shl_code=csharp,true]private async void reminder(string str)
{
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
tb.Text += str;
});
}[/mw_shl_code]


网络很容易就异常
[mw_shl_code=csharp,true]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);
}[/mw_shl_code]


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

传输在request.BeginGetRequestStream(respeonse_streamCallback, request);
[mw_shl_code=csharp,true]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);
}[/mw_shl_code]


简单方法
[mw_shl_code=csharp,true]HttpClient http=new HttpClient();
reminder(await http.GetStringAsync(new Uri(url)));[/mw_shl_code]


获整个对象
[mw_shl_code=csharp,true]HttpResponseMessage response = await http.GetAsync(new Uri(url));
reminder(await response.Content.ReadAsStringAsync());[/mw_shl_code]

[mw_shl_code=csharp,true]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);[/mw_shl_code]

[mw_shl_code=csharp,true]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);[/mw_shl_code]

[mw_shl_code=csharp,true]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();[/mw_shl_code]

看到有人说CSDN博客访问统计是Cache,如果我们要有很多访问,可以使用
[mw_shl_code=csharp,true]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);
});[/mw_shl_code]

***附件停止解析***

我把之前写的一个刷500

cookie可以使用HttpBaseProtocolFilter

设置cookie
[mw_shl_code=csharp,true]HttpCookie cookie = new HttpCookie("名称", "blog.csdn.net", "/")
{
Value = "a",
};
filter.CookieManager.SetCookie(cookie, false);[/mw_shl_code]


原文:***链接停止解析***

博客:blog.csdn.net/lindexi_gd 开发者交流群:53078485,期待您的加入!

敬告:
为防止不可控的内容风险,本站已关闭新用户注册,新贴的发表及评论;
你现在看到的内容只是互联网用户曾经发表的言论快照,仅用于老用户留存纪念,且仅与科技行业相关,全部内容不代表本站观点及立场;
本站重新开放前已针对包括用户隐私、版权保护、信息安全、国家政策在内的各种互联网法律法规要求,执行了隐患内容的自查、屏蔽和删除;
本站目前所属个人主体,未有任何盈利安排与计划,且与原WFUN.COM所属公司不存在任何关联关系;
如果本帖内容或者相关资源侵犯到您的合法权益,或者您认为存在问题,那么请您务必点此举报或投诉!
全部回复:
重头儿再来 UID.356529
2016-03-15 回复

我平时用C++/CX编程,看看楼主的帖子,可以熟悉熟悉c#

qiqiminmin UID.638527
2016-03-15 回复

ReadToEnd在windows mobile 10上有bug。最安全的方式使用 readbytes. ReadToEnd只在pc版上稳定。

看来楼主实际应用不多。

还有楼主也没有分清什么是query,什么是form.

更重要的是,在提交form的时候,也要设置contentType = application/x-www-form-urlencoded.收到response的时候,还要学会抓住set-cookie的header,要不cookie您从哪里来?以为都是浏览器直接用?

li****xi UID.2628546
2016-03-29 回复

Quote***链接停止解析***
ReadToEnd在windows mobile 10上有bug。最安全的方式使用 readbytes. ReadToEnd只在pc版上稳定。

看来楼 ...


原来这样

本站使用Golang构建,点击此处申请开源鄂ICP备18029942号-4联系站长投诉/举报