C#实现http的GET/POST请求封装类-HttpRequest

  • 背景
  • 代码实现

背景

在开发微信应用时,会经常在C#服务端以Http的GET或POST方式请求钉钉平台或微信平台的接口,为了方便发起请求,同时避免引入其他的dll,本人自己编写了一个发送http请求的类,封装了常规的get和post操作,并且不依赖任何其他的dll,很底层~,也很原生。

代码实现

HttpRequest代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;namespace Mesnac.WebChat.Util
{/// <summary>/// Http请求封装类,封装常用的Get,Post请求方法/// </summary>public class HttpRequest{/// <summary>/// 向指定URL发送GET方法的请求/// </summary>/// <param name="url">发送请求的URL</param>/// <param name="param">请求参数,请求参数应该是 name1=value1&name2=value2 的形式。</param>/// <returns>所代表远程资源的响应结果</returns>public static string SendGet(string url, string param){string result = String.Empty;StreamReader reader = null;try{string urlNameString = url + "?" + param;HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlNameString);request.Method = "GET";request.ContentType = "text/html;charset=UTF-8";request.Accept = "*/*";request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)";HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream responseStream = response.GetResponseStream();reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));result = reader.ReadToEnd();reader.Close();responseStream.Close();response.Close();reader = null;responseStream = null;response = null;}catch (Exception ex){Console.WriteLine("发送GET请求出现异常:" + ex.Message);}finally{if (reader != null){reader.Close();}}return result;}/// <summary>/// 向指定URL发送GET方法的请求/// </summary>/// <param name="url">发送请求的URL</param>/// <param name="param">请求参数,请求参数应该是 name1=value1&name2=value2 的形式。</param>/// <param name="encoding">设置响应信息的编码格式,如utf-8</param>/// <returns>所代表远程资源的响应结果</returns>public static string SendGet(string url, string param, string encoding){string result = String.Empty;StreamReader reader = null;try{string urlNameString = url + "?" + param;HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlNameString);request.Method = "GET";request.ContentType = "text/html;charset=" + encoding;request.Accept = "*/*";request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)";HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream responseStream = response.GetResponseStream();reader = new StreamReader(responseStream, Encoding.GetEncoding(encoding));result = reader.ReadToEnd();reader.Close();responseStream.Close();response.Close();reader = null;responseStream = null;response = null;}catch (Exception ex){Console.WriteLine("发送GET请求出现异常:" + ex.Message);}finally{if (reader != null){reader.Close();}}return result;}/// <summary>/// 向指定 URL 发送POST方法的请求/// </summary>/// <param name="url">发送请求的 URL</param>/// <param name="jsonData">请求参数,请求参数应该是Json格式字符串的形式。</param>/// <returns>所代表远程资源的响应结果</returns>public static string SendPost(string url, string jsonData){string result = String.Empty;try{CookieContainer cookie = new CookieContainer();HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);request.Method = "POST";request.Headers.Add("x-requested-with", "XMLHttpRequest");request.ServicePoint.Expect100Continue = false;request.ContentType = "application/x-www-form-urlencoded";request.Accept = "*/*";request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)";request.ContentLength = Encoding.UTF8.GetByteCount(jsonData);request.CookieContainer = cookie;using (StreamWriter writer = new StreamWriter(request.GetRequestStream())){writer.Write(jsonData);}HttpWebResponse response = (HttpWebResponse)request.GetResponse();response.Cookies = cookie.GetCookies(response.ResponseUri);using (Stream responseStream = response.GetResponseStream()){using (StreamReader reader = new StreamReader(responseStream)){result = reader.ReadToEnd();reader.Close();}responseStream.Close();}response.Close();response = null;request = null;}catch (Exception ex){Console.WriteLine("发送GET请求出现异常:" + ex.Message);}return result;}/// <summary>/// 向指定 URL 发送POST方法的请求/// </summary>/// <param name="url">发送请求的 URL</param>/// <param name="jsonData">请求参数,请求参数应该是Json格式字符串的形式。</param>/// <param name="encoding">设置响应信息的编码格式,如utf-8</param>/// <returns>所代表远程资源的响应结果</returns>public static string SendPost(string url, string jsonData, string encoding){string result = String.Empty;try{CookieContainer cookie = new CookieContainer();HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);request.Method = "POST";request.Headers.Add("x-requested-with", "XMLHttpRequest");request.ServicePoint.Expect100Continue = false;request.ContentType = "application/x-www-form-urlencoded";request.Accept = "*/*";request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)";request.ContentLength = Encoding.UTF8.GetByteCount(jsonData);request.CookieContainer = cookie;using (StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.GetEncoding(encoding))){writer.Write(jsonData);}HttpWebResponse response = (HttpWebResponse)request.GetResponse();response.Cookies = cookie.GetCookies(response.ResponseUri);using (Stream responseStream = response.GetResponseStream()){using (StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding(encoding))){result = reader.ReadToEnd();reader.Close();}responseStream.Close();}response.Close();response = null;request = null;}catch (Exception ex){Console.WriteLine("发送GET请求出现异常:" + ex.Message);}return result;}/// <summary>/// 上传媒体文件/// </summary>/// <param name="url">上传媒体文件的微信公众平台接口地址</param>/// <param name="file">要上传的媒体文件对象</param>/// <returns>返回上传的响应结果,详情参看微信公众平台开发者接口文档</returns>public static string UploadPost(string url, string file){string result = String.Empty;try{WebClient client = new WebClient();client.Credentials = CredentialCache.DefaultCredentials;byte[] responseArray = client.UploadFile(url, "POST", file);result = System.Text.Encoding.Default.GetString(responseArray, 0, responseArray.Length);Console.WriteLine("上传result:" + result);}catch (Exception ex){result = "Error:" + ex.Message;Console.WriteLine("发送GET请求出现异常:" + ex.Message);}finally{Console.WriteLine("上传MediaId:" + result);}return result;}public static bool DownloadFile(string url, string param, string outFileName){bool result = false;FileStream fs = null;try{string urlNameString = url + "?" + param;HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlNameString);request.Method = "GET";request.ContentType = "text/html;charset=UTF-8";request.Accept = "*/*";request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)";HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream responseStream = response.GetResponseStream();fs = new FileStream(outFileName, FileMode.Create);int bufferSize = 2048;byte[] data = new byte[bufferSize];int length = 0;while((length = responseStream.Read(data, 0, bufferSize)) > 0){fs.Write(data, 0, length);}fs.Close();responseStream.Close();response.Close();fs = null;responseStream = null;response = null;result = true;}catch (Exception ex){Console.WriteLine("下载媒体文件时出现异常:" + ex.Message);Mesnac.Log.LogService.Instance.Error("下载媒体文件时出现异常:" + ex.Message);}finally{if (fs != null){fs.Close();}}return result;}}
}

C#实现http的GET/POST请求封装类-HttpRequest相关推荐

  1. php http 类,php写的http请求封装类

    本文介绍一个php实现的http请求封装类,封装了三种post提交方法和一个request请求方法,并提供了调用示例,供大家学习参考. 在php编程调试时,经常需要模拟提交. 另外,在抓取一些页面时, ...

  2. 发布一个http请求封装类

    调试时经常要模拟提交,在抓取别人页面时也经常要去请求别人的页面,于是就写了下面这个类.封装了三种post提交方法和一个request请求方法, <?php /** *  HTTP常用请求封装 * ...

  3. Android-网络请求封装类-okhttp

    一些友友们写 安卓的时候,都会 用到网络请求,有时候一个java文件就需要用到多次,每次请求的代码重复型较高,就可以考虑到将请求代码封装起来,下面是请求代码,亲测有效!效果俱佳! 1.        ...

  4. Django(part7)--请求及HttpRequest对象

    学习笔记,仅供参考 请求 HTTP请求 根据HTTP标准,HTTP请求可以使用多种请求方法. HTTP1.0定义了三种请求方法:GET,POST和HEAD方法(最常用) HTTP1.1新增了五种请求方 ...

  5. WEB HTTP:浏览器HTTP协议漫谈、请求对象Httprequest、响应对象HttpResponse、浏览器内部工作原理(待完善)

    0 系列目录 WEB请求处理 WEB请求处理一:浏览器请求发起处理 WEB请求处理二:Nginx请求反向代理 WEB请求处理三:Servlet容器请求处理 WEB请求处理四:Tomcat配置实践 WE ...

  6. 手写简单的HttpServer基于Java nio 实现socket异步通信(请求映射注解方式)

    HttpServer服务类 1 package javax.servlet.http.server2; 2 3 import java.io.IOException; 4 import java.ne ...

  7. EasyNet,更优雅地搭建接口请求及解析网络框架。

    还在使用各种Bean么?还在声明各种接口请求方法吗? 快尝试一下EasyNet吧,一个接口使用一个EasyNetApi对象,只需要定义好你需要请求的EasyNetApi对象,并在回调函数中完成回调就可 ...

  8. iOS处理高并发量的数据请求和数据集合的对应关系

    一.处理高并发请求的核心代码如下: // 创建信号量dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);// 创建全局并行dis ...

  9. 【Netty】使用 Netty 开发 HTTP 服务器 ( HTTP 请求过滤 )

    文章目录 一. HTTP 服务器请求过滤功能 1 . HTTP 服务器资源请求过滤 2 . HTTP 请求过滤方法 二. HTTP 服务器 ( 资源过滤 ) 代码实现 1 . 服务器主程序 2 . 服 ...

最新文章

  1. 华测服务器进不去系统,华测rtk单点到固定怎么操作步骤
  2. 【本站作品】机器学习数学基础专辑
  3. OpenGL定向光的投影阴影
  4. 字符串匹配(KMP 算法 含代码)
  5. 不关注公众号可以获取openid吗_微信公众号粉丝迁移
  6. 织梦task_do.php,织梦20160906更新后栏目空白问题
  7. qweb加html文件,将本地html文件加载到Pyside QwebVi中
  8. php mysql foreach_php foreach输出两次
  9. Dev的多语言简单实现
  10. 3说明书_怎么才能做好产品说明书翻译?知行翻译公司总结了3点
  11. “玲珑杯”ACM比赛 Round #24: C. この戦いが終わったら(BFS+bitset优化暴力)
  12. 代码管理学:首次提出代码的平台化思维
  13. 大叔手记(2):为每个应用程序池单独设置aspnet.config配置文件
  14. 蜗牛角上争天地——吴清源大师、名人、棋魂
  15. 单例模式之懒汉式(线程安全)
  16. opencv+映美相机,从缓冲区中抓图片或者显示视频
  17. 从零开始的ZYNQ学习(基于矿卡EBAZ4205)(二)
  18. 深度 | 为什么通用AMM模型不适用于期权交易定价?
  19. 百度图片爬虫【图片编码处理】
  20. 怎么查看笔记本内存条型号_新买的笔记本如何查看笔记本内存条型号有哪些方法...

热门文章

  1. Trello使用技巧:如何在 trello 删除 card
  2. 年近30岁的你还一直是个loser,要靠什么继续活下去?
  3. 【全电发票】识别,支持PDF/OFD/XML格式
  4. Linux服务器java海康威视SDK
  5. 安卓应用层与底层驱动之间的调用
  6. 前端项目启动流程及常见问题
  7. Python中常见的添加IP代理简单介绍
  8. uni-app:CSS之flex布局居中
  9. 【一】Java 设计模式学习记录: 工厂模式
  10. ffprobe查看多媒体流音视频详情