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请求
随机推荐
- 2019.02.17 spoj Query on a tree VI(链分治)
传送门 题意简述:给你一棵nnn个黑白点的树,支持改一个点的颜色,询问跟某个点颜色相同的连通块大小. 思路: 还是链分治 233 记fi,0/1f_{i,0/1}fi,0/1表示iii的所有颜色为0 ...
- ABP框架系列之三十九:(NLayer-Architecture-多层架构)
Introduction Layering of an application's codebase is a widely accepted technique to help reduce com ...
- myeclipse 自动部署web项目(自动编译)
打开自动编译:project->build automatically; 注:以下两种方法适用tomcat配置在myeclipse中的情况. 1.如果在myeclipse中tomcat是以deb ...
- Android-broadcast静态动态广播
广播的静态和动态类型 静态广播: 1.继承之broadcastreceiver public class MyStaticBroadcastReceiver extends BroadcastRece ...
- IntelliJ IDEA的破解方法
一.下载并安装, IntelliJ IDEA的官网:https://www.jetbrains.com 下载 下载 下载 二.破解. 百度下载一个 JetbrainsCrack-2.7-release ...
- redis之一初识redis
本文主要围绕以下几点进行阐述: 1.什么是redis? 2.为什么要使用redis呢? 3.redis的一些基本配置 4.redis的缺点? 正文: 1.什么是redis? Redis是一款内存高速缓 ...
- LCA(最近公共祖先)——Tarjan
什么是最近公共祖先? 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点. 换句话说,就是两个点在这棵树上距离最近的公共祖先节点. ...
- Swift5 语言指南(十三) 方法
方法是与特定类型相关联的函数.类,结构和枚举都可以定义实例方法,这些方法封装了用于处理给定类型的实例的特定任务和功能.类,结构和枚举也可以定义类型方法,它们与类型本身相关联.类型方法类似于Object ...
- ElasticSearch权威指南学习(结构化查询)
请求体查询 简单查询语句(lite)是一种有效的命令行adhoc查询.但是,如果你想要善用搜索,你必须使用请求体查询(request body search)API. 空查询 我们以最简单的 sear ...
- Python编程语言基础
今天给大家讲解python语言基础~~ 01.python核心数据类型 整型数 int:整数是不带有小数部分的数字 浮点型数 float:浮点数是带有小数部分的数字(小数部分可以是0) 复数 co ...