.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 ...
随机推荐
- Node.js随手笔记
参考文章:https://blog.csdn.net/IronKee/article/details/83780857 安装nvm的方法: 如果已经单独安装了node,建议卸载,然后继续向下看. 直接 ...
- JUnit单元测试--IntelliJ IDEA
单元测试的基本使用 一.环境配置 使用idea IDE 进行单元测试,首先需要安装JUnit 插件. 1.安装JUnit插件步骤 File-->settings-->Plguins--&g ...
- 前端工程化之webpack中配置babel-loader(四)
安装 安装:npm i -D babel-core babel-loader babel-plugin-transform-runtime 安装:npm i -D babel-preset-es201 ...
- cf 1082abc
还是菜,两题dp一题模拟 /* 反正就两个方向,往左或者往右,如果都不行,那就是-1 */ #include<bits/stdc++.h> using namespace std; int ...
- python 防死锁机制
https://www.cnblogs.com/wongbingming/p/9035575.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 在编写多线程程序时,可能无意中就会写 ...
- JDK和CGLIB生成动态代理类的区别
关于动态代理和静态代理 当一个对象(客户端)不能或者不想直接引用另一个对象(目标对象),这时可以应用代理模式在这两者之间构建一个桥梁--代理对象. 按照代理对象的创建时期不同,可以分为两种: 静态代 ...
- [转]win7远程连接ubuntu14.04的相关配置,解决连接时灰屏
如何设置可以远程操作 安装必要的远程桌面的软件:xfce,xrdp,vnc4server sudo apt-get update sudo apt-get install xfce4 sudo apt ...
- Vijos1605 NOIP2008 提高组T4 双栈排序 BFS
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - Vijos1605 题意概括 有1个1~n的排列,有2个栈,现在通过以下操作,使得出栈序列有序. 操作a 当前 ...
- 6-4 破碎的键盘 uva11988
基础的数组链表 用cur标记光标之前的 用last标记最后的十分巧妙 数组开的不够大会引起RE!! next[0]=0:这使得最后一项所指的为0 核心语句: next[i]=next[cur] ne ...
- (转)python中调用R语言通过rpy2 进行交互安装配置详解
python中调用R语言通过rpy2 进行交互安装配置详解(R_USER.R_HOME配置) 2018年11月08日 10:00:11 luqin_ 阅读数:753 python中调用R语言通过r ...