.net中对HTTP请求的简单操作总结

第一部分,HTTP协议的简单了解

一、           什么是HTTP协议

超文本传输协议 (HTTP-Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

二、           HTTP协议简介

HTTP是Hyper Text Transfer Protocol(超文本转移协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)[5]和Internet工作小组IETF(Internet Engineering Task Force)[6]合作的结果,(他们)最终发布了一系列的RFC,RFC 1945[7]定义了HTTP/1.0版本。其中最著名的就是RFC 2616[8]。RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1。为纪念Tim Berners-Lee提出HTTP后对互联网发展的贡献,万维网协会保留有他最原始提交的版本[9]。

HTTP协议(HyperText Transfer Protocol,超文本转移协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等[10]。

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

三、           HTTP请求时包含的信息

发出的请求信息包括以下几个:

●请求行,例如GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif这个文件。

●(请求)头,例如Accept-Language: en

●空行

●可选的消息体 请求行和标题必须以<CR><LF>作为结尾(也就是,回车然后换行)。空行内必须只有<CR><LF>而无其他空格。在HTTP/1.1协议中,所有的请求头,除post外,都是可选的。

四、八种请求方法

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:

OPTIONS - 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。

HEAD- 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。

GET向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在web app.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。

POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

PUT - 向指定资源位置上传其最新内容。

DELETE - 请求服务器删除Request-URI所标识的资源。

TRACE- 回显服务器收到的请求,主要用于测试或诊断。

CONNECT - HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。当然,所有的方法支持的实现都应当符合下述的方法各自的语义定义。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。

五、响应头

客户端向服务器发送一个请求,服务器以一个状态行作为响应,响应的内容包括:消息协议的版本、成功或者错误编码、服务器信息、实体元信息以及必要的实体内容。根据响应类别的类别,服务器响应里可以含实体内容,但不是所有的响应都有实体内容。本节仅简述响应头[13]。

5.1响应头第一行

响应头第一行也称为状态行,格式如下:

HTTP-Version 空格 Status-Code 空格 Reason-Phrase CRLF

HTTP- Version表示HTTP版本,例如为HTTP/1.1。Status- Code是结果代码,用三个数字表示。Reason-Phrase是个简单的文本描述,解释Status-Code的具体原因。Status-Code用于机器自动识别,Reason-Phrase用于人工理解。Status-Code的第一个数字代表响应类别,可能取5个不同的值。后两个数字没有分类作用。Status-Code的第一个数字代表响应的类别,后续两位描述在该类响应下发生的具体状况,具体请参见:HTTP状态码 。

5.2响应头域

服务器需要传递许多附加信息,这些信息不能全放在状态行里。因此,需要另行定义响应头域,用来描述这些附加信息。响应头域主要描述服务器的信息和Request-URI的信息。响应头举例、实体头以及实体请参见: 服务器头文件响应

第二部分,GETPOST请求的差异

1,一般情况下应用目的不同:GET是从服务器上获取数据,POST是向服务器传送数据。

2,将数据提交到服务器的方式不同:GET是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。POST是通过HTTP POST机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

3,服务器端获取变量值的方式不同:一般的,对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。另外两者都可以用Request[]的方式获取值。

4,传递的数据量不同:GET传送的数据量较小,不能大于2KB(这主要是因为受URL长度限制)。POST传送的数据量较大,一般被默认为不受限制。但理论上,限制取决于服务器的处理能力。

5,安全性不同:GET安全性较低,POST安全性较高。因为GET在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。POST的所有操作对用户来说都是不可见的。

第三部分,.net中对HTTP请求的两种请求:GetPost的操作

在.NET中对GET和POST的操作大致上可以分为4步:

第一步,用HttpWebRequest发出请求

第二步,用WebResponse接收http的响应

第三步,在WebResponse中读取http的响应,读取的时候是数据流的方式StreamReader

第四步,将流放入字符串返回

所需要的程序集: System.IO;      System.Web;    System.Net;

代码实现例子:

public enum HttpType
{
POST,
GET
}
public class HttpHelper
{
/// <summary>
/// C#实现Get方式请求WEB
/// </summary>
/// <param name="URL"></param>
/// <returns></returns>
public string GetModel(string URL)
{
string strRet = string.Empty;
try
{
//把URL初始化为新的WebRequest
HttpWebRequest Request = WebRequest.Create(URL) as HttpWebRequest;
Request.Method = "GET";
//超时时间是2秒
Request.Timeout = 2000;
//初始化HTTP响应
HttpWebResponse Response = Request.GetResponse() as HttpWebResponse;
//获取HTTP响应流
Stream resStream = Response.GetResponseStream();

//读取数据流
StreamReader readStream = new StreamReader(resStream);
strRet = readStream.ReadToEnd();

////把数据流放到Char数组中
//Char[] read = new Char[256];
//int count = readStream.Read(read, 0, 256);
////开始读
//while (count > 0)
//{
// string str = new string(read, 0, count);
// //读出
// strRet += str;
// count = readStream.Read(read, 0, 256);
//}
//readStream.Close();
}
catch (Exception ex)
{
strRet = ex.Message;
}

return strRet;
}

/// <summary>
/// C#实现POST方式请求WEB
/// </summary>
/// <param name="URL">请求的URL</param>
/// <param name="strParm">请求的参数</param>
/// <param name="Type"></param>
/// <returns></returns>
public string PostModel(string URL, string strParm, HttpType Type = HttpType.POST)
{
//第一步,用HttpWebRequest发出请求
//第二步,用WebResponse接收http的响应
//第三步,在WebResponse中读取http的响应,读取的时候是数据流的方式StreamReader
//第四步,将流放入字符串返回

#region 第一步
//把输入的参数转换为byte字节
Encoding encode = System.Text.Encoding.Default;
Byte[] arrB = encode.GetBytes(strParm);
//string strBaseUrl = string.Empty;

//把URL实例化为新的WebRequest
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(URL);
//HTTP请求的类型
switch (Type)
{
case HttpType.POST:
Request.Method = "POST";
break;
case HttpType.GET:
Request.Method = "GET";
break;
}
//content_typeHTTP标头值
Request.ContentType = "application/x-www-form-urlencoded";
//length_HTTP标头值
Request.ContentLength = arrB.Length;
//实例化写入请求的参数
Stream outStream = Request.GetRequestStream();
//为参数赋值
outStream.Write(arrB, 0, arrB.Length);
outStream.Close();
#endregion

#region 第二步
WebResponse myResponse = null;
try
{
//接收http的响应
myResponse = Request.GetResponse();
}
catch(Exception ex)
{
string Message = ex.Message;
}
#endregion

#region 第三步
//读取http返回的数据流
Stream ReceiveStream = myResponse.GetResponseStream();
StreamReader readStream = new StreamReader(ReceiveStream);
#endregion

#region 第四步
//Char[] read = new Char[256];
////取出数据流中的数据放入数组中
//int count = readStream.Read(read, 0, read.Length);
//string str = string.Empty;
//while (count > 0)
//{
// str += new string(read, 0, count);
// count = readStream.Read(read, 0, 256);
//}
string str = readStream.ReadToEnd();
readStream.Close();
myResponse.Close();
return str;
#endregion
}
}

.net中对HTTP请求的两种请求:Get和Post的操作的更多相关文章

  1. Ajax中的get和post两种请求方式的异同

    Ajax中我们经常用到get和post请求.那么什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别.   1. get是把参数数据队列加到提交表单的A ...

  2. 转:Ajax中的get和post两种请求方式的异同

    1. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML ...

  3. C#中Post请求的两种方式发送参数链和Body的

    POST请求 有两种方式 一种是组装key=value这种参数对的方式 一种是直接把一个字符串发送过去 作为body的方式 我们在postman中可以看到 sfdsafd sdfsdfds publi ...

  4. strus2中获取表单数据 两种方式 属性驱动 和模型驱动

    strus2中获取表单数据 两种方式 属性驱动 和模型驱动 属性驱动 /** * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值 * 如果一个属性在对象栈,在页面 ...

  5. Ajax的get和post两种请求方式区别

    Ajax的get和post两种请求方式区别 (摘录):http://ip-10000.blog.sohu.com/114437748.html 解get和post的区别. 1. get是把参数数据队列 ...

  6. 第二节:SSL证书的申请、配置(IIS通用)及跳转Https请求的两种方式

    一. 相关概念介绍 1. SSL证书服务 SSL证书服务由"服务商"联合多家国内外数字证书管理和颁发的权威机构.在xx云平台上直接提供的服务器数字证书.您可以在阿里云.腾讯云等平台 ...

  7. 解决 SharePoint 2010 拒绝访问爬网内容源错误的小技巧(禁用环回请求的两种方式)

    这里有一条解决在SharePoint 2010搜索爬网时遇到的“拒绝访问错误”的小技巧. 首先要检查默认内容访问帐户是否具有相应的访问权限,或者添加一条相应的爬网规则.如果目标资源库是一个ShareP ...

  8. kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式

    今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小案例,希望对大家有所帮助,效果图: Retrofit是Square公司开发 ...

  9. iOS- 网络请求的两种常用方式【GET & POST】的区别

    GET和POST 网络请求的两种常用方式的实现[GET & POST] –GET的语义是获取指定URL上的资源 –将数据按照variable=value的形式,添加到action所指向的URL ...

随机推荐

  1. 因实现本地浏览器访问nginx修改配置文件后,安装vsftpd失败

    解决方法如下(修改dns配置) vi /etc/resolv.conf 在此文件最后加入:nameserver 8.8.8.8 如果没有vi编辑器可用: echo "nameserver 8 ...

  2. 在vue项目中正确的引入jquery和bootstrap

    <script>标签引入jquery在vue脚手架里并不适用,需要利用webpack引入jquery 一.第一种方法 1:因为已经安装了vue脚手架,所以需要在webpack中全局引入jq ...

  3. 使用pinyin4j汉字转pinyin

    引入maven依赖<dependencies> <dependency> <groupId>com.belerweb</groupId> <art ...

  4. Mouse without Borders 跨屏鼠标

    Mouse without Borders 跨屏鼠标 软件方式 当你有几台电脑同时工作时,不停的换鼠标和键盘是非常不方便的. 如果用的 Mouse without Borders 就不一样了,可以在多 ...

  5. CentOS上面搭建SVN服务器

    1.安装svn sudo yum install subversion 查看安装位置 which svnserve 确认安装成功 svnserve --version 2.修改全局配置文件修改全局配置 ...

  6. bzoj 4453 cys就是要拿英魂!——后缀数组+单调栈+set

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4453 询问离线,按R排序. 发现直接用 rk[ ] 的错误情况就是前面的某个位置 j 和自己 ...

  7. 用dwr封装表单项提交表单

    首先,配置dwr环境,网上很多资料都说得很详细,这里就不写了. dwr封装form表单项,需要用到dwr定义的一个js方法:DWRUtil.getValues(yourform),这个方法可以返回一个 ...

  8. dataView 工具栏

    option = { tooltip : { trigger: 'axis' }, legend: { data:['最高','最低'] }, toolbox: { show : true, orie ...

  9. 根据wsdl文件生成WebService客户端代码

    有时候在项目中,一个项目可能有好几个公司在做.系统之间难免会出现互相调用接口的现象,这时候有一种办法就是使用webService.本篇文章将介绍如何将对接系统提供的WebService接口,根据对方提 ...

  10. 6kzz整合ueditor

    用过6kzz免费版的朋友都知道,它的后台编辑器是kindeditor,并且是两三年前的版本,有很多功能都没有,现在的kindeditor也不错,但感觉还是没有百度的ueditor强大(据说微信后台的编 ...