HttpRequest、HttpWebRequest和WebRequest的区别

Posted

技术标签:

【中文标题】HttpRequest、HttpWebRequest和WebRequest的区别【英文标题】:Difference between HttpRequest, HttpWebRequest and WebRequest 【发布时间】:2012-01-02 19:58:11 【问题描述】:

我想知道是否有人解释列出的类的区别

【问题讨论】:

两个相关问题:***.com/questions/4457791/… 和 ***.com/questions/896253/… 都有不同的答案,对我来说,这里没有回答主要问题。 【参考方案1】:

HttpRequest 和 Oded already said 完全不同 - 它在服务器端生成 HTTP 请求,以便客户端(例如 HttpWebRequest)可以读取它。

现在,在HttpWebRequestWebRequest 之间,虽然其中一个只是从另一个继承而来,但在实践中,如果您在创建请求时使用http:// 没有区别。 似乎一切都只是代码设计。

要使用WebRequest,我们需要Create,它将返回一个后代类。只要我们使用它的实例,它就会充当后代类的包装器。这是remark from the docs:

WebRequest 是 .NET Framework 用于从 Internet 访问数据的请求/响应模型的 abstract 基类。使用请求/响应模型的应用程序可以以与协议无关的方式从 Internet 请求数据,其中应用程序使用 WebRequest 类的实例,而特定于协议的后代类执行请求的详细信息。

(...)

由于WebRequest类是一个抽象类,WebRequest实例在运行时的实际行为由Create方法返回的后代类决定。有关默认值和异常的详细信息,请参阅后代类的文档,例如 HttpWebRequestFileWebRequest

免责声明

我现在才知道这一点,因为在寻找答案的同时(我在 1 小时前还不知道),我从 forums at codeguru 和 MSDN doc remarks 得到了这个,这一切都感谢google:

HttpWebRequest 类支持WebRequest 中定义的属性和方法以及其他属性和方法,使用户能够使用 HTTP 直接与服务器交互。

然后评论继续(仅选择与差异相关的一些):

不要使用HttpWebRequest 构造函数。使用WebRequest.Create 方法初始化新的HttpWebRequest 对象。如果统一资源标识符 (URI) 的方案是 http:// 或 https://,Create 将返回一个 HttpWebRequest 对象。

GetResponse 方法向RequestUri 属性中指定的资源发出同步 请求,并返回包含响应的HttpWebResponse。您可以使用BeginGetResponseEndGetResponse 方法向资源发出异步请求。

HttpWebRequest 将发送到 Internet 资源的常见 HTTP 标头值公开为属性、由方法设置或由系统设置;

然后有个表there这里就不引用了。

【讨论】:

【参考方案2】:

他们做不同的事情。

WebRequestHttpWebRequest 的抽象基类——你不能直接使用它。它是其他*Request 类(用于FTP、文件和其他类型的Web 请求)的基类。这些类都用于从网络获取资源(文件)。

还有一个WebClient 类 - 可能是所有旨在从 Internet 检索资源的 BCL 类中最简单的一个。

另一方面,

HttpRequest 表示对 ASP.NET 应用程序中资源的请求 - 这是Request服务器端

主要区别在于HttpWebRequest 是HTTP 客户端,而HttpRequest服务器 端,用于ASP.NET Web 应用程序。 p>

【讨论】:

关于我得到的 WebRequest。但是 HttpRequest 和 HttpWebRequest 有什么区别呢? 怎么“不能直接使用”?我一直在用它! @Cawas - 你可以实例化WebRequest? @Cawas - 返回的类型不会是WebRequest 实例,而是继承类之一(比如HttpWebRequestFtpWebRequest 等...)。 WebClient 在后台使用 WebRequest。不错!

以上是关于HttpRequest、HttpWebRequest和WebRequest的区别的主要内容,如果未能解决你的问题,请参考以下文章

django HttpRequest对象

muduo源码-HttpRequest.h

Django框架:视图 HttpRequest对象HttpResponse对象

在 REST WCF 中读取 HttpRequest 正文

Dart 自定义 HttpRequest

“PHP 致命错误:找不到类 'HttpRequest'”