C#中的HttpWebRequest类用法详解
作者:痴者工良 发布时间:2022-11-07 11:41:17
HttpWebRequest 是一个Http 请求类,继承于 WebRequest。
WebRequest 是一个抽象类,能够对统一资源标识符 (URI) 发出请求。
WebRequest 有以下派生类:
System.IO.Packaging.PackWebRequest
System.Net.FileWebRequest
System.Net.FtpWebRequest
System.Net.HttpWebRequest
使用时
using System.Net;
1,HttpWebRequest 实例化
以下是实例化方法,使用 visual studio 编写代码时,会提示 可以简化代码,原因下面说
string url = "http://baidu.com";
HttpWebRequest httpWeb = (HttpWebRequest)HttpWebRequest.Create(url);
HttpWebRequest 对应的是 URL,所以其连接字符串必须是 有效的 HTTP 字符串,网址前面必须加上 Http 协议类型。
可以是
http://
https://
可以加端口
http://baidu.com:666
也可以是IP,但也要加上 http 头和端口。
HttpWebRequest 对象实例化,一般不直接new。而是使用.Create 方法返回一个 WebRequest 对象。
HttpWebRequest httpWeb = (HttpWebRequest)WebRequest.Create("https://www.whuanle.cn:443");
注意下面两个方法:
HttpWebRequest.Create
WebRequest.Create
Cretate 返回的都是 WebRequest 对象,因为 Create 是一个静态方法
public static WebRequest Create(string requestUriString);
public static WebRequest Create(Uri requestUri);
public static WebRequest CreateDefault(Uri requestUri);
所以,创建HttpWebRequest 实例时,这样创建:
HttpWebRequest httpWeb = (HttpWebRequest)WebRequest.Create("https://www.whuanle.cn:443");
HttpWebRequest 支持 GET 和 POST 两种方式进行请求,
设置方法
HttpWebRequest httpWeb = (HttpWebRequest)WebRequest.Create("https://www.whuanle.cn:443");
httpWeb.Method = "GET";
WebRequest 的请求类型。
http://
https://
ftp://
file://
2,GetResponse 获取请求结果
HttpWebRequest 对象 使用 .GetResponse() 方法, 获取返回结果,.GetResponse() 返回的是一个 WebResponse 对象。
WebResponse 对象的方法
Close() | 当由子类重写时,将关闭响应流。 |
CreateObjRef(Type) | 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (Inherited from MarshalByRefObject) |
Dispose() | 释放 WebResponse 对象使用的非托管资源。 |
Dispose(Boolean) | 释放由 WebResponse 对象使用的非托管资源,并可根据需要释放托管资源。 |
Equals(Object) | 确定指定的对象是否等于当前对象。 (Inherited from Object) |
GetHashCode() | 作为默认哈希函数。 (Inherited from Object) |
GetLifetimeService() | 检索控制此实例的生存期策略的当前生存期服务对象。 (Inherited from MarshalByRefObject) |
GetObjectData(SerializationInfo, StreamingContext) | 使用序列化目标对象所需的数据填充 SerializationInfo。 |
GetResponseStream() | 当在子类中重写时,从 Internet 资源返回数据流。 |
GetType() | 获取当前实例的 Type。 (Inherited from Object) |
InitializeLifetimeService() | 获取生存期服务对象来控制此实例的生存期策略。 (Inherited from MarshalByRefObject) |
MemberwiseClone() | 创建当前 Object 的浅表副本。 (Inherited from Object) |
MemberwiseClone(Boolean) | 创建当前 MarshalByRefObject 对象的浅表副本。 (Inherited from MarshalByRefObject) |
ToString() | 返回表示当前对象的字符串。 (Inherited from Object) |
3,获取结果
使用 WebSponse 对象的 GetResponseStream() 方法获取数据流
string Url = "https://www.whuanle.cn:443";
WebRequest wReq = WebRequest.Create(Url);
WebResponse wResp = wReq.GetResponse();
System.IO.Stream respStream = wResp.GetResponseStream();
4,获取流信息
string Url = "https://www.whuanle.cn:443";
WebRequest wReq = WebRequest.Create(Url);
WebResponse wResp = wReq.GetResponse();
System.IO.Stream respStream = wResp.GetResponseStream();
using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.UTF8))
{
string a = "";
while ((a = reader.ReadLine()) != null)
{
Console.WriteLine(a);
}
return reader.ReadToEnd();
}
上面是一个获取流的例子,以 UTF8 编码输出流,以行读取。
下面是另一个方法
string Url = "https://www.whuanle.cn:443";
WebRequest wReq = WebRequest.Create(Url);
WebResponse wResp = wReq.GetResponse();
System.IO.Stream respStream = wResp.GetResponseStream();
using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.UTF8))
{
string str = reader.ReadToEnd();
Console.WriteLine(str);
}
使用 reader.ReadToEnd() 可以一次性从流中读取所有的字符。
推荐一位其他人的文章,里面列出了WebRequest、WebResponse 等对象所有的方法、属性等。
地址:https://www.jb51.net/article/234688.htm
来源:https://www.cnblogs.com/whuanle/p/10458552.html


猜你喜欢
- 本文实例讲述了Java实现多个wav文件合成一个的方法。分享给大家供大家参考,具体如下:前面一篇介绍了java切割wav音频文件的方法,这里
- 一、二叉排序树定义1.二叉排序树的定义二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tr
- CoordinatorLayout 实现了多种Material Design中提到的滚动效果。目前这个框架提供了几种不用写动画代码就能工作的
- 操作步骤如下一、dropzone导入01.dropzone官网下载其插件压缩包并复制项目;02.将CSS和JS文件在HTML文件中引入;//
- 在之前的C#版本中, 如果我们想要进行异步的Udp, 需要单开线程接收消息, C#7.1开始, 我们可以使用async/await关键字来编
- 输入方法第一种输入方法:scannerimport java.util.Scanner; // 导入java.util.Scannerpub
- 在C#中通过使用方法来获取返回值时,通常只能得到一个返回值。因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区
- OpenCV概述OpenCV做为功能强大的计算机视觉开源框架,包含了500多个算法实现,而且还在不断增加,其最新版本已经更新到3.2。其SD
- 排序二叉树概念二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。是数据
- 背景近期在调研一个开源仓库,于是将 代码 从github下载后,当IDEA sync依赖时出现Cannot resolve org.four
- 一、解码流程解码流程大致分为以下三个部分,以FFmpge源码下的ffmpeg\doc\examples\decode_audio.c为参考。
- 前言在之前的文章中,使用mybatis-plus生成了对应的包,在此基础上,我们针对项目的api接口,添加swagger配置和注解,生成sw
- package com.test;import org.htmlparser.Node;import org.htmlparser.Node
- ealsticsearch只是后端提供各种api,那么怎么直观的使用它呢?elasticsearch-head将是一款专门针对于elasti
- 特别提醒:一定要注意文件结构WebappApplication 一定要在包的最外层,否则Spring无法对所有的类进行托管,会造成@Auto
- 在Android程序中很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabAct
- 看完我上一篇文章,「你都理解创建线程池的参数吗?」之后,当遇到这种问题,你觉得你完全能够唬住面试官了,50k轻松到手。殊不知,要是面试官此刻
- /* * 文 件 名: DataCleanManager.java * 描 &nb
- 详解房卡麻将分析系列 "牌局回放" 之 播放处理 昨天红孩儿给大伙讲了讲”牌局回放“的数据记录处
- 在微信公众号支付的API中没有这个接口,如果企业需要给用户转账,或者让用户提现或者给用户发红包等需要再商户平台中的产品中心分别开通。一、开通