Windows 运行时中支持网络资源访问的对象:HttpWebRequest 对象
发送 GET/POST 请求,HttpHelper 封装,超时控制。
HttpClient 对象
发送 GET/POST 请求,请求进度监控。
两种常用请求方式:GET 请求
主要是从服务器请求数据
可以传递有限(1024字节)数据
POST 请求
主要是往服务器发送数据,传递数据大小没有限制。
也可以接收服务端数据,但大多数是请求结果标识。
HttpWebRequest
1 <Grid> 2 <WebView 3 x:Name="webView"/> 4 </Grid>
1 protected async override void OnNavigatedTo(NavigationEventArgs e) 2 { 3 //创建请求对象 4 HttpWebRequest request = WebRequest.CreateHttp("http://www.baidu.com"); 5 //设置请求参数 6 request.Accept = "*/*"; 7 request.Method = "GET"; 8 request.Headers["Cookie"] = "key1=value;key2=val";//密码存储区 9 //发送请求,获取服务端响应 10 var response = await request.GetResponseAsync(); 11 using (var stream = response.GetResponseStream()) 12 { 13 using (var reader = new StreamReader(stream)) 14 { 15 var result = await reader.ReadToEndAsync(); 16 webView.NavigateToString(result); 17 } 18 } 19 }
Index
1 <StackPanel> 2 <TextBox x:Name="txt1"/> 3 <TextBox x:Name="txt2"/> 4 <TextBox x:Name="txt3"/> 5 <Button 6 Content="Send" 7 Click="Button_Click"/> 8 </StackPanel>
1 private async void Button_Click(object sender, RoutedEventArgs e) 2 { 3 //建立WebRequest对象 4 var request = HttpWebRequest.Create("http://localhost:7080/index.ashx"); 5 //设置Method类型为GET/POST 6 request.Method = "POST"; 7 //设置请求Cookie 8 request.Headers["Cookie"] = "cookie_key1=CookieValue1;cookie_key2=CookieValue2"; 9 //设置请求UserAgent为常用Chrome代理 10 request.Headers["User-Agent"] = "Mozilla/5.0(Windows NT 6.3;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/41.0.2243.0 safari/537.36"; 11 //设置请求身份验证网络凭据,用于网络身份验证 12 //request.Credentials = new NetworkCredential("111", "2222"); 13 var bs = Encoding.UTF8.GetBytes("123:321"); 14 request.Headers["Authorization"] = string.Format("Basic{0}", Convert.ToBase64String(bs, 0, bs.Length)); 15 16 //设置请求提交格式 17 request.ContentType = "application/x-www-form-urlencode"; 18 //待发送的数据 格式与QueryString格式相同 19 var sendString = string.Format("txt1={0}&txt2={1}&txt3=(2)", txt1.Text, txt2.Text, txt3.Text); 20 //转换成字节数组用于发送 21 var buffer = Encoding.UTF8.GetBytes(sendString); 22 //设置发送请求流 23 using (var stream = await request.GetRequestStreamAsync()) 24 { 25 //写到请求体中 26 stream.Write(buffer, 0, buffer.Length); 27 } 28 29 //发送请求,获取服务端响应 30 var response = await request.GetResponseAsync(); 31 using (var stream = response.GetResponseStream()) 32 { 33 using (var reader = new StreamReader(stream)) 34 { 35 var result = await reader.ReadToEndAsync(); 36 } 37 } 38 }