通过.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请求的更多相关文章

  1. Xamarin.Android之封装个简单的网络请求类

    一.前言 回忆到上篇 <Xamarin.Android再体验之简单的登录Demo> 做登录时,用的是GET的请求,还用的是同步, 于是现在将其简单的改写,做了个简单的封装,包含基于Http ...

  2. telnet简单操作 模拟请求

    telnet简单操作   模拟请求 一: 二: 三: 按照以上操作即可!

  3. 实现一个简单的http请求工具类

    OC自带的http请求用起来不直观,asihttprequest库又太大了,依赖也多,下面实现一个简单的http请求工具类 四个文件源码大致如下,还有优化空间 MYHttpRequest.h(类定义, ...

  4. sql2008r2,以前好好可以用的,但装了vs2017后,连接不上了,服务也停了,结果手动也 启动不了, 无法加载或初始化请求的服务提供程

    日志: 2017-12-14 12:33:17.53 服务器 A self-generated certificate was successfully loaded for encryption.2 ...

  5. Erlang cowboy 处理简单的HTTP请求

    Erlang cowboy 处理简单的HTTP请求 原文出自: Handling plain HTTP requests 处理请求的最简单的方式是写一个简单的HTTP处理器.它的模型参照Erlang/ ...

  6. C#源码发送简单的HTTP请求

    如下代码内容是关于C#发送简单的HTTP请求的代码,应该能对大家有用处. using System;using System.Collections.Generic;using System.Linq ...

  7. iOS - WKWebView加载不受信任的https (因用到IP地址加端口号去请求数据)

    1.描述:因公司域名临时出现问题,所以项目中引用到了IP地址加端口号去请求数据,因而造成在wkwebView中某些网址打不开,查看错误是因为服务器证书无效,实际就是不受信任; 2.解决办法:在plis ...

  8. node socket :10106无法加载或初始化请求的服务提供程序

    node socket :10106无法加载或初始化请求的服务提供程序 无端端的,不知道怎么回事,node突然就坏掉 了,应该是某些配置无意中改动了,问题如下: 目前能想到的解决办法就是:重置配置,用 ...

  9. 中断 http请求 正在加载 取消http请求

    中断 http请求  正在加载 取消http请求

随机推荐

  1. TensorFlow笔记之常见七个参数

    对TensorFlow深度学习中常见参数的总结分析 神经网络中常见的参数有:初始学习率.学习率衰减率.隐藏层节点数量.迭代轮数.正则化系数.滑动平均衰减率.批训练数量七个参数. 对这七个参数,大部分情 ...

  2. Installing TensorFlow on Ubuntu or Windows

    Installing TensorFlow on Ubuntu 显卡驱动:http://developer2.download.nvidia.com/compute/cuda/8.0/secure/P ...

  3. 2019.02.26 bzoj4311: 向量(线段树分治+凸包)

    传送门 题意: 支持插入一个向量,删去某一个现有的向量,查询现有的所有向量与给出的一个向量的点积的最大值. 思路: 考虑线段树分治. 先对于每个向量处理出其有效时间放到线段树上面,然后考虑查询:对于两 ...

  4. hdu-1878(欧拉回路)

    题目链接:传送门 思路:就是判断无向图的欧拉回路的两个条件:(1)连通性(2)点的度数是偶数 注意:两个条件一同时满足才行. #include<iostream> #include< ...

  5. w3wp.exe(IIS ) CPU 占用 100% 的常见原因

    引起 w3wp.exe(IIS ) Cpu 占用 100% 的常见原因如下: 1. Web 访问量大,从而服务器压力大而引起的 2. 动态页面(.aspx)的程序逻辑复杂程度 3. 页面程序中有死循环 ...

  6. Wordpress“固定链接”页面出现404原因及解决方法

    编辑配置文件:/etc/apache2/apache2.conf(非常靠后的位置),将里面的AllowOverride选项由None设置为All. <Directory /> Option ...

  7. Axure RP Xmind

    官方网站下载地址:http://www.axure.com/download 下载地址:http://www.iaxure.com/2941.html 汉化安装:http://www.iaxure.c ...

  8. Floyd多源最短路

    可以对每一个顶点使用Dijkstra算法求多源最短路. 这里我们来介绍另一种解法:Floyd Floyd算法的主要思想是迭代.每次迭代会朝着答案更近一步. 首先定义一个二维数组Dk[i][j](k初始 ...

  9. 描述linux下文件删除的原理

    Linux文件删除原理: Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除. 一般来说,每个文件都有2个link计数器:i_count 和 i ...

  10. MFC TabCtrl 控件修改标签尺寸

    注意:无论那种方法,都要先设置Tab控件的Style属性为fixed width. 第一种方法 MFC,tabcontrol控件改变标签大小 - CSDN博客 https://blog.csdn.ne ...