准备工作

1.visual studio 2015 update3开发环境

2.net core 1.0.1 及以上版本

 目录

1.HttpGet方法

2.HttpPost方法

3.使用示例

4.代码下载

 1 HttpGet

 /// <summary>
/// 使用Get方法获取字符串结果(没有加入Cookie)
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static async Task<string> HttpGetAsync(string url, Encoding encoding = null)
{
HttpClient httpClient = new HttpClient();
var data = await httpClient.GetByteArrayAsync(url);
var ret = encoding.GetString(data);
return ret;
}
/// <summary>
/// Http Get 同步方法
/// </summary>
/// <param name="url"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string HttpGet(string url, Encoding encoding = null)
{
HttpClient httpClient = new HttpClient();
var t = httpClient.GetByteArrayAsync(url);
t.Wait();
var ret = encoding.GetString(t.Result);
return ret;
}

  

 2 HttpPost方法

 /// <summary>
/// POST 异步
/// </summary>
/// <param name="url"></param>
/// <param name="postStream"></param>
/// <param name="encoding"></param>
/// <param name="timeOut"></param>
/// <returns></returns>
public static async Task<string> HttpPostAsync(string url, Dictionary<string, string> formData = null, Encoding encoding = null, int timeOut = 10000 )
{ HttpClientHandler handler = new HttpClientHandler(); HttpClient client = new HttpClient(handler);
MemoryStream ms = new MemoryStream();
formData.FillFormDataStream(ms);//填充formData
HttpContent hc = new StreamContent(ms); 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"); var r = await client.PostAsync(url, hc);
byte[] tmp = await r.Content.ReadAsByteArrayAsync(); return encoding.GetString(tmp);
} /// <summary>
/// POST 同步
/// </summary>
/// <param name="url"></param>
/// <param name="postStream"></param>
/// <param name="encoding"></param>
/// <param name="timeOut"></param>
/// <returns></returns>
public static string HttpPost(string url, Dictionary<string, string> formData = null, Encoding encoding = null, int timeOut = 10000)
{ HttpClientHandler handler = new HttpClientHandler(); HttpClient client = new HttpClient(handler);
MemoryStream ms = new MemoryStream();
formData.FillFormDataStream(ms);//填充formData
HttpContent hc = new StreamContent(ms); 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"); var t = client.PostAsync(url, hc);
t.Wait();
var t2 = t.Result.Content.ReadAsByteArrayAsync();
return encoding.GetString(t2.Result);
}
/// <summary>
/// 组装QueryString的方法
/// 参数之间用&连接,首位没有符号,如:a=1&b=2&c=3
/// </summary>
/// <param name="formData"></param>
/// <returns></returns>
public static string GetQueryString(this Dictionary<string, string> formData)
{
if (formData == null || formData.Count == 0)
{
return "";
} StringBuilder sb = new StringBuilder(); var i = 0;
foreach (var kv in formData)
{
i++;
sb.AppendFormat("{0}={1}", kv.Key, kv.Value);
if (i < formData.Count)
{
sb.Append("&");
}
} return sb.ToString();
}
/// <summary>
/// 填充表单信息的Stream
/// </summary>
/// <param name="formData"></param>
/// <param name="stream"></param>
public static void FillFormDataStream(this Dictionary<string, string> formData, Stream stream)
{
string dataString = GetQueryString(formData);
var formDataBytes = formData == null ? new byte[0] : Encoding.UTF8.GetBytes(dataString);
stream.Write(formDataBytes, 0, formDataBytes.Length);
stream.Seek(0, SeekOrigin.Begin);//设置指针读取位置
}

  

3 示例

修改View下面的index.cshtml文件

@{
ViewData["Title"] = "Home Page";
Layout = null;
} @{
@*var ret1=await httpclientdemo.HttpHelper.HttpGetAsync("http://www.baidu.com", System.Text.Encoding.GetEncoding("utf-8"));
@Html.Raw(ret1)*@ @*var ret2 = httpclientdemo.HttpHelper.HttpGet("http://www.baidu.com", System.Text.Encoding.GetEncoding("utf-8"));
@Html.Raw(ret2)*@ var ret3 = httpclientdemo.HttpHelper.HttpPost("http://www.baidu.com",null, System.Text.Encoding.GetEncoding("utf-8"));
@Html.Raw(ret3) @*var ret4 = await httpclientdemo.HttpHelper.HttpPostAsync("http://www.baidu.com", null, System.Text.Encoding.GetEncoding("utf-8"),10000);
@Html.Raw(ret4)*@
}

 

4 代码下载

链接:http://pan.baidu.com/s/1gfdqwDX 密码: dxzp

最新文章

  1. SemanticZoom配合GridView组件的使用关键点
  2. SQL Server XML转Table
  3. android 去掉标题
  4. GitHub 中国区前 100 名到底是什么样的人?
  5. PHP——字符串统一转码为GBK,自动判断是否UTF8并转码
  6. CSS Hack及常用的技巧
  7. Eruda——手机网页前端调试面板
  8. unix network programming(3rd)Vol.1 [第2~5章]《读书笔记系列》
  9. 如何忽略usb host 模式设备连接确认对话框
  10. JavaScript的DOM操作(二)
  11. python优秀库 - 使用xmltodict解析xml文档
  12. [转]SQL2005后的ROW_NUMBER()函数的应用
  13. 前端基本知识(四):JS的异步模式:1、回调函数;2、事件监听;3、观察者模式;4、promise对象
  14. [2012-04-25]shell大括号参数扩展(Parameter Expansion)
  15. 微信小程序开发之模板
  16. Redis4.0 之持久化存储
  17. Linux应用调试 :使用gdb和gdbserver进行远程调试
  18. I2C总线通信
  19. ***PHP基于H5的微信支付开发详解(CI框架)
  20. 分形之谢尔宾斯基(Sierpinski)三角形

热门文章

  1. Android中不能在子线程中更新View视图的原因
  2. 自己动手实现java数据结构(八) 优先级队列
  3. 自己动手实现java数据结构(四)双端队列
  4. [TensorFlow] Introducing TensorFlow Feature Columns
  5. 浅谈Java泛型中的? extends E和?super E
  6. laravel C层接收数据的步骤
  7. [引]ionic framework 相关网站
  8. 深入理解RDD原理
  9. 配置hadoop-eclipse-plugin(版本hadoop2.7.3):
  10. Java基础——Oracle(五)