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请求
随机推荐
- Git的SSH-key生成、导入及使用
Git主要使用4种协议传输数据:本地协议,SSH协议,Git协议和HTTP/S协议. SSH协议是最为常用的一种,正式介绍SSH之前,简要说明一下其它协议. 本地协议(file://) 本地协议的优点 ...
- Chapter3_操作符_直接常量和指数计数法
(1)直接常量 在程序中使用直接常量,相当于指导编译器,告诉它要生成什么样的类型,这样就不会产生模棱两可的情况.比如flaot a = 1f等,后缀表示告诉编译器想生成的类型.常用的后缀有l/L(lo ...
- Pattern Design - Strategy Pattern
If you can disassemble code and you want to apply one method of an object in another object that t ...
- Number of subarrays having sum exactly equal to k(explanation for 437. Path Sum III of leetcode)
https://www.geeksforgeeks.org/number-subarrays-sum-exactly-equal-k/ 讲解的详细 看这道题是为了解决https://leetcode. ...
- Navicat for MYSQL 断网时本地连接无法打开,2005错误
Navicat for MYSQL 断网时本地连接无法打开,2005错误 NO1 提示下图: NO2 解决方法: (1)选中本地连接,右键 连接属性 (2) 将 主机名或IP地址 这一栏改为 127. ...
- Monkey测试简介【转载】
转载:https://www.xuebuyuan.com/3182523.html 一.Monkey测试简介 Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸 ...
- 利用Go2Shell 实现 Mac Finder 直接shell端打开当前文件夹
Finder 窗口 ,点击下图所示的按钮(红色框内),即可打开Shell Terminal. 打开后,如图 用法 安装go2shell后,打开finder的application文件夹,找到go2sh ...
- 【WPF】实现类似QQ聊天消息的界面
最近公司有个项目,是要求实现类似 QQ 聊天这种功能的. 如下图 这没啥难的,稍微复杂的也就表情的解析而已. 表情在传输过程中的实现参考了新浪微博,采用半角中括号代表表情的方式.例如:“abc[dog ...
- IDEA tomcat 热部署不生效的问题
- InnoDB体系架构(三)Checkpoint技术
Checkpoint技术 前篇 InnoDB体系架构(二)内存 从缓冲池.缓冲池的管理.重做日志缓冲.额外内存缓冲这四个点介绍了InnoDB存储引擎的内存结构,而在将缓冲池的数据刷新到磁盘的过程中使用 ...