C# 应用 - 使用 HttpWebRequest 发起 Http 请求
- helper 类封装
- 调用
1. 引用的库类
\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.dll
System.Net.HttpWebRequest
2代码 helper 类封装
/// <summary>
/// REST帮助类
/// </summary>
public class RESTHelper
{
/// <summary>
/// 不含请求参数的URL
/// </summary>
public string EndPoint { get; set; }
/// <summary>
/// 请求动作
/// </summary>
public HttpVerb Method { get; set; }
/// <summary>
/// 请求格式(application/json,text/xml,application/x-www-form-urlencoded,multipart/form-data)
/// </summary>
public string ContentType { get; set; }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="endpoint">路径</param>
/// <param name="method">请求动作</param>
public RESTHelper(string endpoint, HttpVerb method)
{
EndPoint = endpoint;
Method = method;
ContentType = "application/json";
}
/// <summary>
/// 将对象转换为json格式然后命令,一般是使用post请求
/// </summary>
/// <param name="jsonmodel">参数对象,不能传入string类型</param>
/// <param name="encode">字符编码,可为null</param>
/// <returns></returns>
public string MakeJsonPostRequest(object jsonmodel, Encoding encode = null, WebHeaderCollection headerCollection = null)
{
string postData = "";
if (jsonmodel != null)
{
//将对象序列化为json字符串,忽略null值
postData = JsonConvert.SerializeObject(jsonmodel, new Newtonsoft.Json.JsonSerializerSettings { NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, DateFormatString = "yyyy-MM-dd HH:mm:ss" });
}
return MakeRequest("", postData, encode, headerCollection);
}
/// <summary>
/// 发送请求,包含url的参数和请求数据
/// </summary>
/// <param name="parameters">请求参数,如page=1&page_size=20</param>
/// <param name="postData">请求数据</param>
/// <param name="encode">字符编码,可为null</param>
/// <returns></returns>
public string MakeRequest(string parameters, string postData, Encoding encode = null, WebHeaderCollection headerCollection = null)
{
// endpoint与请求参数拼接成完整的请求url
string requesturlstring = EndPoint + (string.IsNullOrEmpty(parameters) ? "" : "?" + parameters);
// 请求前记录日志
DateTime dt = DateTime.Now;
if (WriteLog.LoggerInstance.IsDebugEnabled) WriteLog.WriteLogger.Debug("[REST请求] 请求时间:" + dt.ToString("mm:ss.fff") + "\r\nURI:" + requesturlstring + "\r\n发送请求:" + postData);
// 初始化http请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requesturlstring);
if (headerCollection != null)
request.Headers = headerCollection;
request.Method = Method.ToString();
request.ContentLength = 0;
request.ContentType = ContentType;
request.Timeout = ConfigInfo.RESTTimeOut;
//request.Credentials = new NetworkCredential("username", "password");//传入验证信息
// 编码格式
encode = encode == null ? Encoding.UTF8 : encode;
// POST时,向流写入postData数据
if (!string.IsNullOrEmpty(postData) && Method == HttpVerb.POST)
{
var bytes = encode.GetBytes(postData);
// 设置请求数据的长度
request.ContentLength = bytes.Length;
using (var writeStream = request.GetRequestStream())
{
writeStream.Write(bytes, 0, bytes.Length);
}
}
// 返回值
var responseValue = string.Empty;
// 获取返回值
using (var response = (HttpWebResponse)request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
using (var reader = new StreamReader(responseStream, encode))
{
responseValue = reader.ReadToEnd();
// 记录返回结果日志
if (WriteLog.LoggerInstance.IsDebugEnabled) WriteLog.WriteLogger.Debug("[REST结果] 请求时间:" + dt.ToString("mm:ss.fff") + "\r\nURI:" + requesturlstring + "\r\n返回数据:" + responseValue);
return responseValue;
}
}
}
}
/// <summary>
/// 将json字符串转换为对象(使用DataContractJsonSerializer)
/// </summary>
/// <param name="response"></param>
/// <param name="dateformatstring">时间格式</param>
/// <returns></returns>
public T ConvertJson<T>(string response)
{
try
{
DataContractJsonSerializer Serializer = new DataContractJsonSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(response)))
{
return (T)Serializer.ReadObject(stream);
}
}
catch (Exception ex)
{
WriteLog.WriteLogger.Error("将json字符串转换为对象出错!\r\njson为:" + response, ex);
return default(T);
}
}
/// <summary>
/// 将json字符串转换为对象(使用Json.net)
/// </summary>
/// <param name="response"></param>
/// <param name="dateformatstring">时间格式</param>
/// <returns></returns>
public T JsonNetConvertJson<T>(string response)
{
try
{
JsonSerializerSettings jsSetting = new JsonSerializerSettings();
jsSetting.NullValueHandling = NullValueHandling.Ignore;
return JsonConvert.DeserializeObject<T>(response, jsSetting);
//return JsonConvert.DeserializeObject<T>(response);
}
catch (Exception ex)
{
Common.WriteLog.Error("将json字符串转换为对象出错!\r\njson为:" + response, ex);
return default(T);
}
}
}
/// <summary>
/// http请求方法/动作
/// </summary>
public enum HttpVerb
{
GET,
POST,
PUT,
DELETE
}
3. 调用
public class AClass{}
public AClass RequestAClass(string id)
{
AClass entity = null;
try
{
var uri = ConfigInfo.GetRestUri("GetAClassInfo");
// 参数校验
if (string.IsNullOrEmpty(id))
return null;
var restHelper = new RESTHelper(uri.Uri, HttpVerb.GET);
var jsonString = restHelper.MakeRequest(id);
entity = restHelper.ConvertJson<PrisonerInfoResponseModel>(jsonString);
}
catch (Exception exception) {}
return entity;
}
4. Http 系列
4.1 发起请求
使用 HttpWebRequest 发起 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501036.html
使用 WebClient 发起 Http 请求 :https://www.cnblogs.com/MichaelLoveSna/p/14501582.html
使用 HttpClient 发起 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501592.html
使用 HttpClient 发起上传文件、下载文件请求:https://www.cnblogs.com/MichaelLoveSna/p/14501603.html
4.2 接受请求
使用 HttpListener 接受 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501628.html
使用 WepApp 接受 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501612.html
使用 WepApp 处理文件上传、下载请求:https://www.cnblogs.com/MichaelLoveSna/p/14501616.html
C# 应用 - 使用 HttpWebRequest 发起 Http 请求的更多相关文章
- C# 应用 - 使用 HttpClient 发起 Http 请求
1. 需要的库类 \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Net.Http.dll System.N ...
- C# 应用 - 使用 WebClient 发起 Http 请求
1. 需要的库类 \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.dll System.Net.WebCli ...
- 【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端
原文地址:http://docode.top/Article/Detail/10002 目录: 1.Http协议上传文件(以图片为例)请求报文体内容格式 2.完整版HttpWebRequest模拟上传 ...
- 发起post请求
string postUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo"; //string req ...
- 使用 HttpRequester 更方便的发起 HTTP 请求
使用 HttpRequester 更方便的发起 HTTP 请求 Intro 一直感觉 .net 里面(这里主要说的是 .net framework 下)发送 HTTP 请求的方式用着不是特别好用,而且 ...
- NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用
NET MVC全局异常处理(一) 目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...
- 根据URL发起HTTP请求,我的HTTPHelper。
完整的demo using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- .net 模拟发起HTTP请求(用于上传文件)
用C#在服务端发起http请求,附上代码一 /// <summary> /// 文件帮助类 /// </summary> public class FileHelper { / ...
- C#发起Http请求,调用接口
//方法1. Post 异步请求,普通的异步请求,传输普通的字符串等,对于有html代码的字段值的传输支持不好,如果需要传输html,二进制等数据的传输,请使用下面第二个方法,即使用UploadDat ...
随机推荐
- 大规模数据爬取 -- Python
Python书写爬虫,目的是爬取所有的个人商家商品信息及详情,并进行数据归类分析 整个工作流程图: 第一步:采用自动化的方式从前台页面获取所有的频道 from bs4 import Beautiful ...
- 修改jpg的图片大小
using System.Drawing.Imaging; public void ResizePic(string oldFilePath, int thumbnailImageWidth, int ...
- 鸟哥的linux私房菜——第十章学习(BASH)
第十章 BASH 1.0).认识BASH 作用:通过" Shell "可以将我们输入的指令与 Kernel 沟通,好让Kernel 可以控制硬件来正确无误的工作! 应用程序其实是在 ...
- Windows下TeamViewer远程控制的安装与使用
Windows下远程控制的安装与使用 由于疫情,在家里写论文,资料数据都在学校,只能远程控制了,选的是TeamViewer. 分为控制机和被控制机,安装使用略有不同. 从该网址安装:https://w ...
- 调用其他文件__name__=='__main__'下代码
如何调用其他文件__name__=='__main__'下代码 使用os.system()或者subprocess.run()执行该文件,用这种方法相当于直接创建了一个子进程,新调用的py不影响当前调 ...
- 杭电多校HDU 6586 String(预处理 + 贪心)题解
题意: 给你一个串,现需要你给出一个子序列,满足26个约束条件,\(len(A_i) >= L_i\) 且 \(len(A_i) <= R_i\), \(A_i\)为从a到z的26个字母. ...
- Spring应用上下文生命周期
Spring应用上下文生命周期整体分成四个阶段 ConfigurableApplicationContext#refresh,加载或者刷新持久化配置 ConfigurableApplicationCo ...
- SQLite在C#的使用
SQLite在C#的使用 http://www.cnblogs.com/SharkBin/archive/2012/11/03/2752277.html System.Data.SQLite.DLL的 ...
- hihoCoder Challenge 1
#1034 : 毁灭者问题 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在 Warcraft III 之冰封王座中,毁灭者是不死族打三本后期时的一个魔法飞行单位. 毁 ...
- Mac 开机时为什么突然响一下,duang
Mac 开机时为什么突然响一下,duang duang 一下 https://zh.wikipedia.org/wiki/Duang refs xgqfrms 2012-2020 www.cnblog ...