提供基于HttpWebRequest的请求的应用类,其中包含:get请求(带参或不带参)、post请求、文件传输请求

方法的具体说明:

PostHttp:post请求,支持三种提交模式:FROM、JSON、XML

GetHttp:get请求(带参或不带参)

PostFile:文件传输请求

/// <summary>
/// 提供HttpWebRequest请求的相关封装.
/// 本接口所提供的方法均不含异常拦截处理,请在调用的主方法中去拦截请求异常.
/// </summary>
public static class Request
{
#region post 请求
public enum PostType
{
/// <summary>
/// 表单模式,传入参数格式如:roleId=1&uid=2
/// </summary>
FROM = ,
/// <summary>
/// JSON格式字符串,格式如:{k:v,k2:v2,k3:{kk1:vv1}}
/// </summary>
JSON = ,
/// <summary>
/// XML模式
/// </summary>
XML =
}
public static string PostHttp(string url, string body, PostType type = PostType.FROM)
{
string resStr = string.Empty;
switch (type)
{
case PostType.FROM:
resStr = PostForm(url, body);
break;
case PostType.JSON:
resStr = PostJson(url, body);
break;
case PostType.XML:
resStr = PostXml(url, body);
break;
default:
resStr = PostForm(url, body);
break;
}
return resStr;
} #region post请求几种方式(私有)
/// <summary>
/// POST表单
/// </summary>
/// <param name="url"></param>
/// <param name="body"></param>
/// <returns></returns>
private static string PostForm(string url, string body)
{
string resStr = string.Empty;
byte[] bs = Encoding.UTF8.GetBytes(body);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = bs.Length; using (Stream reqStream = myRequest.GetRequestStream())
{
reqStream.Write(bs, , bs.Length);
} using (HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse())
{
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
resStr = sr.ReadToEnd();
sr.Close();
}
myRequest.Abort();
return resStr;
} /// <summary>
/// POST XML
/// </summary>
/// <param name="url">请求url(不含参数)</param>
/// <param name="body">请求body. soap"text/xml; charset=utf-8"xml字符串</param>
/// <returns></returns>
private static string PostXml(string url, string body)
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.ContentType = "text/xml;charset=utf-8";
httpWebRequest.Method = "POST";
//httpWebRequest.Timeout = timeout;//设置超时
httpWebRequest.Headers.Add("SOAPAction", "http://tempuri.org/mediate"); byte[] btBodys = Encoding.UTF8.GetBytes(body);
httpWebRequest.ContentLength = btBodys.Length;
httpWebRequest.GetRequestStream().Write(btBodys, , btBodys.Length); #region 取消异常拦截
//HttpWebResponse httpWebResponse;
//try
//{
// httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
//}
//catch (WebException ex)
//{
// httpWebResponse = (HttpWebResponse)ex.Response;
//}
#endregion HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8);
string responseContent = streamReader.ReadToEnd(); httpWebResponse.Close();
streamReader.Close();
httpWebRequest.Abort(); return responseContent;
} /// <summary>
/// POST json
/// </summary>
/// <param name="url"></param>
/// <param name="JSONData"></param>
/// <returns></returns>
private static string PostJson(string url, string JSONData)
{
string result = string.Empty;
//byte[] bs = Encoding.UTF8.GetBytes(body);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
myRequest.Method = "POST";
myRequest.ContentType = "application/json"; using (var streamWriter = new StreamWriter(myRequest.GetRequestStream()))
{
streamWriter.Write(JSONData);
streamWriter.Flush();
streamWriter.Close();
} var httpResponse = (HttpWebResponse)myRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
result = streamReader.ReadToEnd();
} httpResponse.Close();
myRequest.Abort();
return result;
}
#endregion #endregion #region get请求
/// <summary>
/// get请求
/// </summary>
/// <param name="url">请求url(不含参数)</param>
/// <param name="postDataStr">参数部分:roleId=1&uid=2</param>
/// <param name="timeout">等待时长(毫秒)</param>
/// <returns></returns>
public static string GetHttp(string url, string postDataStr,int timeout=)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + (postDataStr == "" ? "" : "?") + postDataStr);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
request.Timeout = timeout;//等待 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close(); response.Close();
request.Abort();
return retString;
}
#endregion #region 文件传输请求
/// <summary>
/// 传输文件到指定接口
/// </summary>
/// <param name="url"></param>
/// <param name="filePath">文件物理路径</param>
/// <returns></returns>
public static string PostFile(string url, string filePath)
{
string resStr = string.Empty; // 初始化HttpWebRequest
HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(url); // 封装Cookie
Uri uri = new Uri(url);
Cookie cookie = new Cookie("Name", DateTime.Now.Ticks.ToString());
CookieContainer cookies = new CookieContainer();
cookies.Add(uri, cookie);
httpRequest.CookieContainer = cookies; if (!File.Exists(filePath))
{
return "文件不存在";
}
FileInfo file = new FileInfo(filePath); // 生成时间戳
string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");
byte[] boundaryBytes = Encoding.ASCII.GetBytes(string.Format("\r\n--{0}--\r\n", strBoundary)); // 填报文类型
httpRequest.Method = "Post";
httpRequest.Timeout = * ;
httpRequest.ContentType = "multipart/form-data; boundary=" + strBoundary; // 封装HTTP报文头的流
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(strBoundary);
sb.Append(Environment.NewLine);
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append("file");
sb.Append("\"; filename=\"");
sb.Append(file.Name);
sb.Append("\"");
sb.Append(Environment.NewLine);
sb.Append("Content-Type: ");
sb.Append("multipart/form-data;");
sb.Append(Environment.NewLine);
sb.Append(Environment.NewLine);
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sb.ToString()); // 计算报文长度
long length = postHeaderBytes.Length + file.Length + boundaryBytes.Length;
httpRequest.ContentLength = length; // 将报文头写入流
Stream requestStream = httpRequest.GetRequestStream();
requestStream.Write(postHeaderBytes, , postHeaderBytes.Length); byte[] buffer = new byte[];
int bytesRead = ;
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
while ((bytesRead = fileStream.Read(buffer, , buffer.Length)) != )
{
requestStream.Write(buffer, , bytesRead);
}
} // 将报文尾部写入流
requestStream.Write(boundaryBytes, , boundaryBytes.Length);
// 关闭流
requestStream.Close(); using (HttpWebResponse myResponse = (HttpWebResponse)httpRequest.GetResponse())
{
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
resStr = sr.ReadToEnd();
sr.Close();
//Console.WriteLine("反馈结果" + responseString);
}
httpRequest.Abort();
return resStr;
}
#endregion
}

.NET HttpWebRequest应用的更多相关文章

  1. 利用HttpWebRequest实现实体对象的上传

    一 简介 HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对 ...

  2. C#通过WebClient/HttpWebRequest实现http的post/get方法

    C#通过WebClient/HttpWebRequest实现http的post/get方法 http://www.cnblogs.com/shadowtale/p/3372735.html

  3. C# HttpWebRequest获取COOKIES

    C# HttpWebRequest获取COOKIES byte[] bytes = Encoding.Default.GetBytes(_post); CookieContainer myCookie ...

  4. 在使用 HttpWebRequest Post数据时候返回 400错误

    笔者有一个项目中用到了上传zip并解压的功能.开始觉得很简单,因为之前曾经做过之类的上传文件的功能,所以并不为意,于是使用copy大法.正如你所料,如果一切很正常的能运行的话就不会有这篇笔记了. 整个 ...

  5. .net学习笔记----HttpRequest,WebRequest,HttpWebRequest区别

    WebRequest是一个虚类/基类,HttpWebRequest是WebRequest的具体实现 HttpRequest类的对象用于服务器端,获取客户端传来的请求的信息,包括HTTP报文传送过来的所 ...

  6. C#使用HttpWebRequest 进行请求,提示 基础连接已经关闭: 发送时发生错误。

    本人今天遇到的错误,C#使用HttpWebRequest 进行请求,提示 基础连接已经关闭: 发送时发生错误. 测试了很久,才发现,是安全协议问题,把安全协议加上就可以了

  7. C# winfrom HttpWebRequest 请求获取html网页信息和提交信息

    string result =GetRequest("http://localhost:32163/DuoBao/ajax.aspx", "time=5"); ...

  8. ASP.NET中使用HttpWebRequest调用WCF

    最近项目需要和第三网站进行数据交换,第三方网站基本都是RESTfull形式的API,但是也有的是Web Service,或者.NET里面的WCF.微软鼓励大家使用WCF替代Web Service. W ...

  9. 【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端

    原文地址:http://docode.top/Article/Detail/10002 目录: 1.Http协议上传文件(以图片为例)请求报文体内容格式 2.完整版HttpWebRequest模拟上传 ...

  10. .Net(c#)模拟Http请求之HttpWebRequest封装

    一.需求: 向某个服务发起请求获取数据,如:爬虫,采集. 二.步骤(HttpWebRequest): 无非在客户端Client(即程序)设置请求报文(如:Method,Content-Type,Age ...

随机推荐

  1. com.mysql.jdbc.MysqlDataTruncation: Data truncation异常

    Exception in thread "main" com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too l ...

  2. 项目Beta冲刺(团队)——05.23(1/7)

    项目Beta冲刺(团队)--05.23(1/7) 格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺(团队) 团队名称:为了交项目干杯 作业目标:记录Beta敏捷冲刺第1 ...

  3. 命令行的方式启动和关闭Mysql

    命令行的方式启动和关闭Mysql mysql -h 主机名 -P 端口号 -u 用户名 -p 密码 例如:mysql -h localhost -P 3306 -u root -p11111(p和密码 ...

  4. spark读写Oracle、hive的艰辛之路(一)

    前两天工作需求,要通过给的几个Oracle的视图把数据入到hive库中,很遗憾,使用的华为云平台的集区环境中并没有sqoop1,当然也并没有sqoop2,所以,想到的解决方案是使用spark读取Ora ...

  5. 跑起来JEE论坛、商城和网站的经验总结

    前言:昨天我们老大给我分配了几个任务,让我把几个公司的项目运行起来跑一下,几个项目都是JEE上开源的,三个项目,一个网站内容系统.一个BBS论坛.一个jspgou商城,这三个都是开源的,倒腾了两天,今 ...

  6. combineReducers(reducers)

    combineReducers(reducers) 随着应用变得越来越复杂,可以考虑将 reducer 函数 拆分成多个单独的函数,拆分后的每个函数负责独立管理 state 的一部分. combine ...

  7. 事物分析、静态分析(结构分析)与UML

    事物分析: 1)要素分析: 2)结构(组织.关系)分析: 符合软件中的数据库观点和UML观点: 符合数据结构的观点. 符合由点到面的观点. 将关系和元素提到了同等重要的地位. 符合哲学中普遍联系的观点 ...

  8. 命令式&函数式:把大象关进冰箱里问题

    面向过程:把大象关进冰箱里: 把冰箱门打开=> 大象放冰箱里=> 冰箱门关上 面向对象: 冰箱.开门() 冰箱.放入(大象) 冰箱.关门() 函数式: 关进(冰箱,大象): 关门(放入(开 ...

  9. 理解JPA注解@GeneratedValue的使用方法

    https://blog.csdn.net/u012838207/article/details/80406716 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基 ...

  10. 文件搜索命令——grep

    1.查找关键字在文件中的一行的信息: 2.不区分大小写进行查询: #号开头表示注释行,并不是配置文件. 3.grep -v(排除查找): -v 可以去除掉某些没用的行,以上命令可以去除掉以#号开头的注 ...