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如何构造多叉树,这样前台就可接收到数据递归构造树形菜单了。我们来理一下如何实现构造多叉树的逻辑吧,其实整个问题概括起
- asp.net core 中已经自带了一个官方的依赖注入框架,现在想把它应用到控制台程序中,控制台程序是最简洁的代码结构,摒除了其他一堆嵌入
- 一个简单的红包生成算法,代码如下:/** * 红包 * @param n * @param money 单位:分 * @return **/
- using System;using System.Collections.Generic;using System.ComponentMo
- 最近一直在对接接口,上游返回的都是 JSON 数据,我们需要将这些数据进行保存,我们可以解析成 Map 通过 key 的方式进行获取,然后
- 测试类中的问题和解决思路问题在测试类中,每个测试方法都有以下两行代码:ApplicationContext ac = new ClassPa
- 1、pom.xml文件添加distributionManagement节点。模块项目中如果存在父子项目,且父子项目的jar包都需要上传到 *
- 使用Unity API PlayerBuildInterface.CompilePlayerScripts 将项目中的代码生成为 DLL 程
- 若干年前在使用SpringMVC的时候,发现springMVC可以把HttpSession,HttpRequest组件化注入:@Autowi
- 我的接口是这样的:TestCase测试Impl类的方法没有问题,但是Swgger和前端调用接口就会报404错误:在网上查了很多资料,都说是地
- 简介我们在开发web应用的时候,有时候为了适应浏览器大小的调整,需要动态对页面的组件进行位置的调整。这时候就会用到flow layout,也
- 项目数据库中出现许多值为中括号[]的数据,测试报了bug,经过排查是因为使用了json-lib 的jar包导致。json-lib在将xml字
- 本篇介绍基于SSM框架(Spring4.0+SpringMVC+Mybatis)组合的Javamail应用,邮箱的话基于腾讯的QQ邮箱,其实
- @PostConstruct不被调用的原因如果在配置文件中配置使用,延迟加载的话如图被@Service等注解的类,需要在注入使用的时候,才会
- 前言实现轨迹回放,GMap.NET有对应的类GMapRoute。这个类函数很少,功能有限,只能实现简单的轨迹回放。要实现更复杂的轨迹回放,就
- 使用lamda表达式对list进行求和Lambda 表达式是 JDK8 的一个新特性,最近写项目中求和计算使用的较多,写篇文章记录下。1、实
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 本文基于jdk1.8进行分析关于HashMap的简介,可以参考这篇文章https://www.jb51.net/article/154177
- 双重循环打印顶点在左上的直角三角形:public static void main(String[] args) { // TO
- 好几天没有跟进Spring MVC的学习了,之前看了点源码都忘的差不多了。这次就跟着之前的问题,继续总结下Spring MVC中的小知识。u