C#实现加简单的Http请求
通过.Net中的两个类 HttpWebRequest 类, HttpWebResponse 类来实现Http的请求,响应处理。
第一个小测试是请求百度首页( http://www.baidu.com )的内容,也就是要获得百度首页的html内容,
实现步骤:
1.通过WebRequest类创建一个HttpWebRequest的对象,该对象可以包含Http请求信息。
(我有点不理解的是,为什么要通过父类WebRequest来创建这个对象,而不能new一个HttpWebRequest来创建
,在HttpWebRequest类中的构造函数是:
protected HttpWebRequest(SerializationInfo serializationInfo, StreamingContext streamingContext); )
2.设置HttpWebRequest对象,其实就是设置Http请求报文的信息内容。
3.从HttpWebRequest对象中获取HttpWebResponse对象,该对象包含Http响应信息。
4.从响应信息中获取响应头信息和响应主体信息。
部分实现代码如下:
创建HttpWebRequest请求,设置请求报文信息
1 //请求
2 string uri = http://www.baidu.com;
3 HttpWebRequest request = HttpWebRequest.Create(uri) as HttpWebRequest;
4 request.Method = "GET"; //请求方法
5 request.ProtocolVersion = new Version(1, 1); //Http/1.1版本
//Add Other ...
接收响应,输出响应头部信息以及主体信息
1 HttpWebResponse response=
2 request.GetResponse() as HttpWebResponse;
3 //Header
4 foreach (var item in response.Headers)
5 {
6 this.txt_Header.Text += item.ToString()+": " +
7 response.GetResponseHeader (item.ToString())
8 + System.Environment.NewLine;
9 }
10
11 //如果主体信息不为空,则接收主体信息内容
12 if (response.ContentLength <= 0)
13 return;
14 //接收响应主体信息
15 using(Stream stream =response.GetResponseStream())
16 {
17 int totalLength=(int)response.ContentLength;
18 int numBytesRead=0;
19 byte[] bytes=new byte[totalLength+1024];
20 //通过一个循环读取流中的数据,读取完毕,跳出循环
21 while( numBytesRead < totalLength )
22 {
23 int num=stream.Read(bytes,numBytesRead,1024); //每次希望读取1024字节
24 if( num==0 ) //说明流中数据读取完毕
25 break;
26 numBytesRead+=num;
27 } 28 }
29 //将接收到的主体数据显示到界面
30 string content=Encoding.UTF8.GetString(bytes);
31 this.txt_Content.Text=content;
第二个小测试是请求网上的一张图片,并将图片保存到本地。
实现步骤与第一个小测试的非常类似,通过图片的url向服务器进行请求,然后
接收响应,响应的主体信息内容保存为本地图片文件。一小点不同之处就在于
需要将主体内容保存为文件形式,不是显示到界面上。
关键代码如下:
1 //...
2 string url="http://xx.xxx/xx.jpg"; //图片资源的url
3 //...
4 using (Stream stream = response.GetResponseStream())
5 {
6 //当前时间作为文件名
7 string fileName = DateTime.Now.ToString("yyyyMMddhhmmss")+".jpg";
8 using (Stream fsStream = new FileStream(fileName, FileMode.Create))
9 {
10 stream.CopyTo(fsStream);
11 }
12 }
C#实现加简单的Http请求的更多相关文章
- Xamarin.Android之封装个简单的网络请求类
一.前言 回忆到上篇 <Xamarin.Android再体验之简单的登录Demo> 做登录时,用的是GET的请求,还用的是同步, 于是现在将其简单的改写,做了个简单的封装,包含基于Http ...
- telnet简单操作 模拟请求
telnet简单操作 模拟请求 一: 二: 三: 按照以上操作即可!
- 实现一个简单的http请求工具类
OC自带的http请求用起来不直观,asihttprequest库又太大了,依赖也多,下面实现一个简单的http请求工具类 四个文件源码大致如下,还有优化空间 MYHttpRequest.h(类定义, ...
- sql2008r2,以前好好可以用的,但装了vs2017后,连接不上了,服务也停了,结果手动也 启动不了, 无法加载或初始化请求的服务提供程
日志: 2017-12-14 12:33:17.53 服务器 A self-generated certificate was successfully loaded for encryption.2 ...
- Erlang cowboy 处理简单的HTTP请求
Erlang cowboy 处理简单的HTTP请求 原文出自: Handling plain HTTP requests 处理请求的最简单的方式是写一个简单的HTTP处理器.它的模型参照Erlang/ ...
- C#源码发送简单的HTTP请求
如下代码内容是关于C#发送简单的HTTP请求的代码,应该能对大家有用处. using System;using System.Collections.Generic;using System.Linq ...
- iOS - WKWebView加载不受信任的https (因用到IP地址加端口号去请求数据)
1.描述:因公司域名临时出现问题,所以项目中引用到了IP地址加端口号去请求数据,因而造成在wkwebView中某些网址打不开,查看错误是因为服务器证书无效,实际就是不受信任; 2.解决办法:在plis ...
- node socket :10106无法加载或初始化请求的服务提供程序
node socket :10106无法加载或初始化请求的服务提供程序 无端端的,不知道怎么回事,node突然就坏掉 了,应该是某些配置无意中改动了,问题如下: 目前能想到的解决办法就是:重置配置,用 ...
- 中断 http请求 正在加载 取消http请求
中断 http请求 正在加载 取消http请求
随机推荐
- 词向量之word2vec实践
首先感谢无私分享的各位大神,文中很多内容多有借鉴之处.本次将自己的实验过程记录,希望能帮助有需要的同学. 一.从下载数据开始 现在的中文语料库不是特别丰富,我在之前的文章中略有整理,有兴趣的可以看看. ...
- 【转】背后的故事之 - 快乐的Lambda表达式(二)
快乐的Lambda表达式 上一篇 背后的故事之 - 快乐的Lambda表达式(一)我们由浅入深的分析了一下Lambda表达式.知道了它和委托以及普通方法的区别,并且通过测试对比他们之间的性能,然后我们 ...
- 79、iOS 的Cocoa框架、Foundation框架以及UIKit框架
Cocoa框架是iOS应用程序的基础 1. Cocoa是什么? Cocoa是 OS X和ios 操作系统的程序的运行环境. 是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发 ...
- diango中的url路由系统
一.url配置 url本质是url与要为该url调用的视图函数之间的映射表 urlpatterns = [正则,视图函数[,别名]] 二.正则表达式 1.匹配原则 django是循环urlpatter ...
- Merge Parts of Rar/7z Package in Linux
When file is too large, we will compress it and split it into several parts. Now Let me show you how ...
- 桌面应用开发之WPF动态背景
因为项目需要,在WPF开发的桌面应用中,登陆页面需使用动态背景.由于没有前端开发人员,所以由半吊子的后端开发人员根据效果图写前端xaml.去掉页面上边框,抽离动态背景设置代码: <Windo ...
- 用Django ORM实现树状结构
前言 之前看对于用关系数据库实现树状结构的方法就知道一直做自关联的表,但是感觉自关联查询太慢了,最近看到一篇文章,感觉视野开拓了好多,文章:数据库表设计,没有最好只有最适合来自:微信. 下面就针对这里 ...
- 【jenkins 忘记密码】忘记Jenkins管理员密码的解决办法
一.admin密码未更改情况 1.进入\Jenkins\secrets目录,打开initialAdminPassword文件,复制密码: 2.访问Jenkins页面,输入管理员admin,及刚才的密码 ...
- MFC开发中添加自定义消息和消息响应函数
(1)在.h或.cpp文件定义一个消息 #define CLICK_MESSAGE_BOX WM_USER+1001 //add by 20180612 给主窗口ctrl.cpp发送消息 //自定义消 ...
- [ 9.24 ]CF每日一题系列—— 468A构造递推
Description: 1 - n个数问你能否经过加减乘除这些运算n -1次的操作得到24 Solutrion: 一开始想暴力递推,发现n的范围太大直接否决,也否决了我的跑dfs,后来就像肯定有个递 ...