.Net Standard HttpClient封装Htt请求常用操作整理
一、常用Http操作
1.Get请求,有参数,无参数
2.Post 请求,有参数,无参数
3.文件简单下载
修改NetHelper中Post请求方法Bug:请求编码默认UTF8,字符串内存流读取后这是到开始位置。
/// <summary>
/// Post 请求,无参(注:默认使用UTF8编码)
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static async Task<string> PostAsync(string url, string content = "")
{
HttpClient client = new HttpClient();
using (MemoryStream ms = new MemoryStream())
{
byte[] bytes = Encoding.UTF8.GetBytes(content);
ms.Write(bytes, , bytes.Length);
ms.Seek(, SeekOrigin.Begin);//设置指针读取位置,否则发送无效
HttpContent hc = new StreamContent(ms);
HttpResponseMessage resp = await client.PostAsync(url, hc);
return await resp.Content.ReadAsStringAsync();
}
}
以前代码:
/// <summary>
/// http协议请求方法封装
/// </summary>
public class NetHelper
{
#region Get请求
/// <summary>
/// get请求,无参
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static async Task<string> GetAsync(string url)
{
HttpClient client = new HttpClient();
HttpResponseMessage resp = await client.GetAsync(url);
//获取响应状态
//respMsg.StatusCode==200请求成功
//获取请求内容
HttpContent respContent = resp.Content;
return await respContent.ReadAsStringAsync();
}
/// <summary>
/// Get 请求,指定参数
/// </summary>
/// <param name="url"></param>
/// <param name="dic"></param>
/// <returns></returns>
public static async Task<string> GetAsync(string url, Dictionary<string, string> dic)
{
//参数处理
StringBuilder builder = new StringBuilder();
builder.Append(url);
if (dic.Count > )
{
builder.Append("?");
int i = ;
foreach (var item in dic)
{
if (i > )
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
}
return await GetAsync(builder.ToString());
} /// <summary>
/// get 请求 -同步处理
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string Get(string url)
{
Task<string> result = GetAsync(url);
result.Wait();
return result.Result;
}
/// <summary>
/// Get请求-同步处理
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="dic">请求参数</param>
/// <returns></returns>
public static string Get(string url, Dictionary<string, string> dic)
{
//参数处理
StringBuilder builder = new StringBuilder();
builder.Append(url);
if (dic.Count > )
{
builder.Append("?");
int i = ;
foreach (var item in dic)
{
if (i > )
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
}
return Get(builder.ToString());
}
#endregion #region Post 请求处理
/// <summary>
/// Post 请求,无参
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static async Task<string> PostAsync(string url, string content = "")
{
HttpClient client = new HttpClient();
using (MemoryStream ms = new MemoryStream())
{
byte[] bytes = Encoding.Unicode.GetBytes(content);
ms.Write(bytes, , bytes.Length);
HttpContent hc = new StreamContent(ms);
HttpResponseMessage resp = await client.PostAsync(url, null);
return await resp.Content.ReadAsStringAsync();
}
}
/// <summary>
/// Post 请求,处理参数
/// </summary>
/// <param name="url"></param>
/// <param name="dic"></param>
/// <returns></returns>
public static async Task<string> PostAsync(string url, Dictionary<string, string> dic)
{
HttpClient client = new HttpClient();
FormUrlEncodedContent data = new FormUrlEncodedContent(dic);
var r = await client.PostAsync(url, data);
return await r.Content.ReadAsStringAsync();
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xhtml+xml"));
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml", 0.9));
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("image/webp"));
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*", 0.8));
//hc.Headers.Add("UserAgent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36");
//hc.Headers.Add("Timeout", timeOut.ToString());
//hc.Headers.Add("KeepAlive", "true");
} /// <summary>
/// Post请求,同步,无参
/// </summary>
/// <param name="url"></param>
/// <param name="content"></param>
/// <returns></returns>
public static string Post(string url, string content = "")
{
Task<string> str = PostAsync(url, content);
str.Wait();
return str.Result;
}
/// <summary>
/// Post 请求,同步,参数处理
/// </summary>
/// <param name="url"></param>
/// <param name="dic"></param>
/// <returns></returns>
public static string Post(string url, Dictionary<string, string> dic)
{
Task<string> str = PostAsync(url, dic);
str.Wait();
return str.Result;
}
#endregion #region 下载文件处理
/// <summary>
/// 下载文件
/// </summary>
/// <param name="url">链接地址</param>
/// <param name="target">存储地址</param>
/// <returns></returns>
public static bool DownLoad(string url, string target)
{
try
{
HttpClient client = new HttpClient();
var t = client.GetByteArrayAsync(url);
t.Wait(); var bytes = t.Result;
using (FileStream fs = new FileStream(target, FileMode.Create))
{
fs.Write(bytes, , bytes.Length);
fs.Close();
}
return true;
}
catch (Exception ex)
{
throw new Exception("下载文件失败,", ex);
}
}
#endregion
}
更多:
.Net Standard HttpClient封装Htt请求常用操作整理的更多相关文章
- javascript中字符串常用操作整理
javascript中字符串常用操作整理 字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用 ...
- vim程序编辑器---常用操作整理
vim程序编辑器---常用操作整理 移动光标方法 o 在光标行的下一行,进入编辑模式 $ 移动到光标这行,最末尾的地方 G(大写) 移动到文件最末行 :set nu 文件显示行数 :set non ...
- vim编辑器——常用操作整理
注意:以下的操作都是在命令状态下进行的,不要进入插入状态了.参考这里 1.删除 dd 删除一行 ndd 删除以当前行开始的n行dw 删除以当前字符开始的一个字符ndw 删除 ...
- Mysql数据库常用操作整理
0.说明 MySQL数据库是一个十分轻便的数据库管理系统,相比大型的数据库管理系统如Oracle,MySQL更拥有轻便.灵活.开发速度快的特色,更适用于中小型数据的存储与架构,被数以万计的网站采用.从 ...
- vim用户手册笔记常用操作整理
"x"命令可以删除一个字符 "d"命令可以后跟任何一个位移命令,它将删除从当前光标起到位移的终点处的文本内容dw "c",改变命令例如cw ...
- vim常用操作整理
一.删除操作 :%s/r//g 删除DOS方式的回车^M :%s= *$== 删除行尾空白 :%s/^(.*)n1/1$/ 删除重复行 :%s/^.pdf/new.pdf/ 只是删除第一个pdf :% ...
- MongoDB常用操作整理
Mongodb:是一种NoSQL数据库,NoSQL:Not Only SQLSQL: 数据表->JDBC读取->POJO(VO.PO)->控制层转化为JSON数据->客户端 这 ...
- PphpStorm常用操作整理
本地修改记录:在项目名称上右键,点击Local History | Show History.你可以看到项目文件各个历史版本:Alt+Shift+C,可以看到项目最近的修改.这就是它的版本集成功能特性 ...
- Javascript 字符串(二)常用操作整理
一.js获取字符串的字节数 这个好使--- function getBytesLength(str) { // 在GBK编码里,除了ASCII字符,其它都占两个字符宽 return str.repla ...
随机推荐
- Android动画分类
动画分类 View动画(补间动画).帧动画.属性动画 View动画(补间动画)包括:平移.旋转.缩放.透明度,View动画是一种渐近式动画 帧动画:图片切换动画 属性动画:通过动态改变对象的属性达到动 ...
- js子节点children和childnodes的用法(非原创)
想要获取子节点的数量,有几种办法. childNodes 它会把空的文本节点当成节点, <ul> 文本节点 <li>元素节点</li> 文本节点 <li> ...
- java多线程快速入门(三)
通过实现Runnable接口实现多线程 package com.cppdy; //通过实现Runnable接口实现多线程 class MyThread1 implements Runnable{ @O ...
- 【转】js中的事件委托或是事件代理详解
起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...
- iOS学习笔记之Block
写在前面 学习iOS开发的过程中,在很多场合都遇到了Block.说实话,虽然自己依葫芦画瓢的将Block"拿来"用着,但这种"拿来主义"与学习时应持有的探索精神 ...
- python+selenium十三:破解简单的图形验证码
此方法可破解简单的验证码,如: 注:中文识别正在寻找办法 安装: 1.python3 2.Pillow 3.pytesseract 4.tesseract-ocr 下载地址:https://pa ...
- String对象的常用属性和方法
属性 描述 length 在大多数情况下返回字符串中的字符数 方法 描述 toUpperCase() 将字符串修改为大写字母 toLowerCase() 将字符串修改为小写字母 charAt() 以索 ...
- HDFS上创建文件、写入内容
1.创建文件 hdfs dfs -touchz /aaa/aa.txt 2.写入内容 echo "<Text to append>" | hdfs dfs -appen ...
- DailyWallpaper v1.03 released
根据这一段时间的使用发现了一些问题,重新修正一下. 修正电脑从休眠状态中恢复时如果没有网络连接程序报错的bug. 添加了异常处理语句,防止抓取网页数据时的错误. 这个版本将是最后一个bug fix版本 ...
- 安装elasticsearch-7.0.0及插件
下载安装包:(下载地址:https://www.elastic.co/cn/downloads/elasticsearch)elasticsearch-7.0.0-linux-x86_64.tar.g ...