.NET修仙传
修炼秘籍
.net 修炼路线图
书籍大全
C#入门后该如何进阶?如何提升自己?
读写 Excel 四种方案
书籍大全
dotnet命令大全
C# 程序集加载方法
linux 下部署.net环境
.NET WebAPI中FromRoute、FromQuery、FromBody的关键角色与用法
C# 新用法
盘点C#最有价值的10个语法糖
C#基础语法与数据类型
序列化
C# 7.0
模式匹配Pattern Matching
优秀实用的类库推荐
2024年C#优秀实用的类库推荐
依赖注入与中间件
依赖注入
查询所有已注入的服务
WebApi实现批量注入
原生依赖注入
自动依赖注入框架
优秀中间件
依赖注入
Autofac
生命周期
文档操作
PDF操作
PDF合并及生成书签目录
Excel操作
几个Excel文件合并去重分类
Excel文件之COM组件方式
操作Excel文件之NPOI
INI文件
面试宝典
WebService、WCF、WebAPI、一般处理程序
C# 线程和进程的区别
asp.net core 服务生命周期
asp.net core 的中间件都有哪些
操作系统编程
获取搜狗输入法中英文
com组件集成
执行系统命令
通过句柄嵌入exe窗体程序
windows-开机自启动
程序调用cmd命令生成WCF服务的客户端调用文件
获取电脑信息
键盘记录器
键盘改键功能
监听鼠标操作
框架揭秘
01编程初体验
中间件 Middleware
路由
配置管理
配置系统
配置管理
日志管理
Log4Net
NLog
.net core原始日志记录
日志管理
Serilog
LINQ
LINQ概讲
LINQ编程
常用方法
ORM
EF Core初始化
EF Core的实体类配置
执行原生SQL语句
EF Core
操作sqlite
操作Mysql数据库
操作LiteDB
AutoMapper高效实现对象映射
AutoMapper
AutoMapper 10个常用方法总结
缓存
Redis支持哪几种数据类型?
什么是Redis?简述它的优缺点?
Redis相比memcached有哪些优势?
认证
什么是 JWT?它是如何工作的?
.net framework jwt
.net core Jwt操作
认证管理
.Net WebApi校验Token/参数的几种方式
鉴权授权
Authorization的几种方式
基础语法
集合
1、C#中常用集合类型
yield return 简化迭代并提高代码质量
AOP
.net core AOP
操作筛选器
网络编程
TCP 连接的前世今生
HttpRequest,WebRequest,HttpWebRequest,WebClient,HttpClient 之间的区别
网络编程
WebApi获取客户信息
通信
HTTP通信
公共类-HttpHelper
多线程编程
十种线程方式分析
Task-筑基期
parallel-筑基
消息队列
Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?
构建高性能 API 的高级技术
优秀教程网站
每日学习地址
全套教程汇总
理解ASP.NET Core
定时任务
定时器的三种使用方式
定时任务之windows任务计划程序
创建任务到Windows任务计划程序
定时任务之Quartz.Net
IHostedService启动时运行定时任务
JSON序列化反序列化工具
前辈
发布部署
应用部署
GRPC
使用GRPC多个proto文件
本文档使用 MrDoc 发布
-
+
首页
公共类-HttpHelper
```java public static string PostDataGetHtml(string url, string postData) public static string GetDataGetHtml(string url) public static bool GetDataGetHtml(string url, string filePath, ref string mg) public static int Upload_Request(string address, string fileNamePath, string saveName) public static int Upload_Request(string address, Stream fileStream, string saveName) public static string HttpPostData(string url, string fileKeyName, string filePath, string filename, NameValueCollection stringDict, int timeOut = 900000) public static bool HttpDownLoadFiles(string uri, string filefullpath, int size = 1024) public static bool DownLoadFiles(string uri, string filefullpath, int size = 1024) ``` ```java using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace Spp.Net { public class HttpHelper { /// <summary> /// HttpWebRequest 通过Post /// </summary> /// <param name="url">URI</param> /// <param name="postData">post数据</param> /// <returns></returns> public static string PostDataGetHtml(string url, string postData) { try { byte[] data = Encoding.UTF8.GetBytes(postData); Uri uri = new Uri(url); HttpWebRequest req = WebRequest.Create(uri) as HttpWebRequest; if (req == null) { return "Network error:" + new ArgumentNullException("httpWebRequest").Message; } req.Method = "POST"; req.KeepAlive = true; req.ContentType = "application/x-www-form-urlencoded"; req.ContentLength = data.Length; req.AllowAutoRedirect = true; Stream outStream = req.GetRequestStream(); outStream.Write(data, 0, data.Length); outStream.Close(); var res = req.GetResponse() as HttpWebResponse; if (res == null) { return "Network error:" + new ArgumentNullException("HttpWebResponse").Message; } Stream inStream = res.GetResponseStream(); var sr = new StreamReader(inStream, Encoding.UTF8); string htmlResult = sr.ReadToEnd(); return htmlResult; } catch (Exception ex) { return "网络错误(Network error):" + ex.Message; } } /// <summary> /// HttpWebRequest 通过get /// </summary> /// <param name="url">URI</param> /// <returns></returns> public static string GetDataGetHtml(string url) { try { HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.ContentType = "application/x-www-form-urlencoded"; httpWebRequest.Method = "GET"; //对发送的数据不使用缓存 httpWebRequest.AllowWriteStreamBuffering = false; httpWebRequest.Timeout = 300000; httpWebRequest.ServicePoint.Expect100Continue = false; HttpWebResponse webRespon = (HttpWebResponse)httpWebRequest.GetResponse(); Stream webStream = webRespon.GetResponseStream(); if (webStream == null) { return "网络错误(Network error):" + new ArgumentNullException("webStream"); } StreamReader streamReader = new StreamReader(webStream, Encoding.UTF8); string responseContent = streamReader.ReadToEnd(); webRespon.Close(); streamReader.Close(); return responseContent; } catch (Exception ex) { return "网络错误(Network error):" + ex.Message; } } /// <summary> /// HttpWebRequest 通过get /// </summary> /// <param name="url">URI</param> /// <returns></returns> public static bool GetDataGetHtml(string url, string filePath, ref string mg) { try { HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.ContentType = "application/x-www-form-urlencoded"; httpWebRequest.Method = "GET"; //对发送的数据不使用缓存 httpWebRequest.AllowWriteStreamBuffering = false; httpWebRequest.Timeout = 300000; httpWebRequest.ServicePoint.Expect100Continue = false; HttpWebResponse webRespon = (HttpWebResponse)httpWebRequest.GetResponse(); Stream webStream = webRespon.GetResponseStream(); if (webStream == null) { return false; } StreamReader streamReader = new StreamReader(webStream, Encoding.UTF8); string responseContent = streamReader.ReadToEnd(); mg = responseContent; webRespon.Close(); streamReader.Close(); if (responseContent.ToUpper().IndexOf("NULL") > -1) { return false; } else { FileStream fs = new FileStream(filePath, FileMode.Create); var buff = Encoding.UTF8.GetBytes(responseContent); fs.Write(buff, buff.Length, 0); fs.Close(); return true; } } catch (Exception ex) { return false; } } /// <summary> /// 将本地文件上传到指定的服务器(HttpWebRequest方法) /// </summary> /// <param name="address">文件上传到的服务器</param> /// <param name="fileNamePath">要上传的本地文件(全路径)</param> /// <param name="saveName">文件上传后的名称</param> /// <returns>成功返回1,失败返回0</returns> public static int Upload_Request(string address, string fileNamePath, string saveName) { // 要上传的文件 try { if (!File.Exists(fileNamePath)) { return 0; } FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read); return Upload_Request(address, fs, saveName); } catch (Exception ex) { return 0; } } /// <summary> /// 将本地文件流上传到指定的服务器(HttpWebRequest方法) /// </summary> /// <param name="address">文件上传到的服务器</param> /// <param name="fileStream">要上传的本地文件流</param> /// <param name="saveName">文件上传后的名称</param> /// <returns>成功返回1,失败返回0</returns> public static int Upload_Request(string address, Stream fileStream, string saveName) { int returnValue = 0; fileStream.Position = 0; var r = new BinaryReader(fileStream); //时间戳 string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x"); byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n"); //请求头部信息 StringBuilder sb = new StringBuilder(); sb.Append("--"); sb.Append(strBoundary); sb.Append("\r\n"); sb.Append("Content-Disposition: form-data; name=\""); sb.Append("file"); sb.Append("\"; filename=\""); sb.Append(saveName); sb.Append("\""); sb.Append("\r\n"); sb.Append("Content-Type: "); sb.Append("application/octet-stream"); sb.Append("\r\n"); sb.Append("\r\n"); string strPostHeader = sb.ToString(); byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader); try { // 根据uri创建HttpWebRequest对象 HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(address)); httpReq.Method = "POST"; //对发送的数据不使用缓存 httpReq.AllowWriteStreamBuffering = false; //设置获得响应的超时时间(300秒) httpReq.Timeout = 300000; httpReq.ServicePoint.Expect100Continue = false; httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary; long length = fileStream.Length + postHeaderBytes.Length + boundaryBytes.Length; long fileLength = fileStream.Length; httpReq.ContentLength = length; byte[] buffer = new byte[fileLength]; Stream postStream = httpReq.GetRequestStream(); //发送请求头部消息 postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); int size = r.Read(buffer, 0, buffer.Length); postStream.Write(buffer, 0, size); //添加尾部的时间戳 postStream.Write(boundaryBytes, 0, boundaryBytes.Length); postStream.Close(); //获取服务器端的响应 HttpWebResponse webRespon = (HttpWebResponse)httpReq.GetResponse(); if (webRespon.StatusCode == HttpStatusCode.OK) //如果服务器未响应,那么继续等待相应 { Stream s = webRespon.GetResponseStream(); StreamReader sr = new StreamReader(s); //读取服务器端返回的消息 String sReturnString = sr.ReadLine(); s.Close(); sr.Close(); fileStream.Close(); if (sReturnString == "Success") { returnValue = 1; } else { returnValue = 0; } } } catch (Exception ex) { returnValue = 0; } return returnValue; } /// <summary> /// 将本地文件上传到指定服务器上(HttpWebRequest方法),并传递相应参数 /// </summary> /// <param name="url">文件上传到的服务器</param> /// <param name="fileKeyName">类型(此处为文件--file)</param> /// <param name="filePath">要上传的本地文件(全路径)</param> /// <param name="filename">文件上传后的名称</param> /// <param name="stringDict">参数集合</param> /// <param name="timeOut">请求时效</param> /// <returns></returns> public static string HttpPostData(string url, string fileKeyName, string filePath, string filename, NameValueCollection stringDict, int timeOut = 900000) { string responseContent; try { var memStream = new MemoryStream(); var webRequest = (HttpWebRequest)WebRequest.Create(url); // 边界符 var boundary = "---------------" + DateTime.Now.Ticks.ToString("x"); // 边界符 var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); // 最后的结束符 var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n"); // 设置属性 webRequest.Method = "POST"; webRequest.Timeout = timeOut; webRequest.ContentType = "multipart/form-data; boundary=" + boundary; // 写入文件 const string filePartHeader = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: application/octet-stream\r\n\r\n"; var header = string.Format(filePartHeader, fileKeyName, filename); var headerbytes = Encoding.UTF8.GetBytes(header); memStream.Write(beginBoundary, 0, beginBoundary.Length); memStream.Write(headerbytes, 0, headerbytes.Length); var buffer = new byte[1024]; int bytesRead; // =0 while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) { memStream.Write(buffer, 0, bytesRead); } // 写入字符串的Key var stringKeyHeader = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"" + "\r\n\r\n{1}\r\n"; foreach (byte[] formitembytes in from string key in stringDict.Keys select string.Format(stringKeyHeader, key, stringDict[key]) into formitem select Encoding.UTF8.GetBytes(formitem)) { memStream.Write(formitembytes, 0, formitembytes.Length); } // 写入最后的结束边界符 memStream.Write(endBoundary, 0, endBoundary.Length); webRequest.ContentLength = memStream.Length; var requestStream = webRequest.GetRequestStream(); memStream.Position = 0; var tempBuffer = new byte[memStream.Length]; memStream.Read(tempBuffer, 0, tempBuffer.Length); memStream.Close(); requestStream.Write(tempBuffer, 0, tempBuffer.Length); requestStream.Close(); var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"))) { responseContent = httpStreamReader.ReadToEnd(); } fileStream.Close(); httpWebResponse.Close(); webRequest.Abort(); } catch (Exception ex) { responseContent = ex.Message; } return responseContent; } /// <summary> /// Http下载文件支持断点续传 /// </summary> /// <param name="uri">下载地址</param> /// <param name="filefullpath">存放完整路径(含文件名)</param> /// <param name="size">每次多的大小</param> /// <returns>下载操作是否成功</returns> public static bool HttpDownLoadFiles(string uri, string filefullpath, int size = 1024) { try { string fileDirectory = System.IO.Path.GetDirectoryName(filefullpath); if (!Directory.Exists(fileDirectory)) { Directory.CreateDirectory(fileDirectory); } string fileFullPath = filefullpath; string fileTempFullPath = filefullpath + ".tmp"; if (File.Exists(fileFullPath)) { return true; } else { if (File.Exists(fileTempFullPath)) { FileStream fs = new FileStream(fileTempFullPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite); byte[] buffer = new byte[512]; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); request.Timeout = 10000; request.AddRange((int)fs.Length); Stream ns = request.GetResponse().GetResponseStream(); long contentLength = request.GetResponse().ContentLength; int length = ns.Read(buffer, 0, buffer.Length); while (length > 0) { fs.Write(buffer, 0, length); buffer = new byte[512]; length = ns.Read(buffer, 0, buffer.Length); } fs.Close(); File.Move(fileTempFullPath, fileFullPath); } else { FileStream fs = new FileStream(fileTempFullPath, FileMode.Create); byte[] buffer = new byte[512]; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); request.Timeout = 10000; request.AddRange((int)fs.Length); Stream ns = request.GetResponse().GetResponseStream(); long contentLength = request.GetResponse().ContentLength; int length = ns.Read(buffer, 0, buffer.Length); while (length > 0) { fs.Write(buffer, 0, length); buffer = new byte[512]; length = ns.Read(buffer, 0, buffer.Length); } fs.Close(); File.Move(fileTempFullPath, fileFullPath); } return true; } } catch (Exception ex) { return false; } } /// <summary> /// Http下载文件 /// </summary> /// <param name="uri">下载地址</param> /// <param name="filefullpath">存放完整路径(含文件名)</param> /// <param name="size">每次多的大小</param> /// <returns>下载操作是否成功</returns> public static bool DownLoadFiles(string uri, string filefullpath, int size = 1024) { try { if (File.Exists(filefullpath)) { try { File.Delete(filefullpath); } catch (Exception ex) { return false; } } string fileDirectory = System.IO.Path.GetDirectoryName(filefullpath); if (!Directory.Exists(fileDirectory)) { Directory.CreateDirectory(fileDirectory); } FileStream fs = new FileStream(filefullpath, FileMode.Create); byte[] buffer = new byte[size]; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); request.Timeout = 10000; request.AddRange((int)fs.Length); Stream ns = request.GetResponse().GetResponseStream(); long contentLength = request.GetResponse().ContentLength; int length = ns.Read(buffer, 0, buffer.Length); while (length > 0) { fs.Write(buffer, 0, length); buffer = new byte[size]; length = ns.Read(buffer, 0, buffer.Length); } fs.Close(); return true; } catch (Exception ex) { return false; } } } } ```
孙端己
2024年9月2日 11:31
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码