在程序用调用 Http 接口、请求 http 资源、编写 http 爬虫等的时候都需要在程序集中进行 Http 请求。

  很多人习惯的 WebClient、HttpWebRequest 在 TPL 下很多用起来不方便的地方,TPL 下推荐使用 HttpClient(using System.Net.Http;),.net core 下已经不支持 WebClient 等

  HttpClient 发 出 Get 请 求 获 取 文 本 响 应 : string html = await hc.GetStringAsync("http://www.rupeng.com");

   HttpClient 发出Post请求使用

  1. //第一个参数是请求的地址,第二个参数就是用来设置请求内容的
  2. Task<HttpResponseMessage> PostAsync(string requestUri, HttpContent content)

  HttpContent是一个抽象类:主要的子类有:

    1.    FormUrlEncodedContent(表单格式请求)、
    2.   StringContent(字符串请求)、
    3.   MultipartFormDataContent(Multipart 表单请求,一般带上传文件信息)、
    4.   StreamContent(流内容)。

发送一个Get请求

  1. private async void button1_Click(object sender, EventArgs e)
  2. {
  3. //发送异步的Get请求
  4. HttpClient hc = new HttpClient();
  5. //await hc.GetByteArrayAsync()
  6. //await hc.GetStreamAsync()
  7. string html=await hc.GetStringAsync("http://127.0.0.1:8081/Home/Login");
  8. textBox1.Text = html;
  9. }

发送一个POST表单格式请求:

  1. private async void button2_Click(object sender, EventArgs e)
  2. {
  3. HttpClient hc = new HttpClient();
  4. //List<KeyValuePair<string, string>> nameValues = new List<KeyValuePair<string, string>>();
  5. //nameValues.Add(new KeyValuePair<string, string>("userName", "admin123"));
  6. //nameValues.Add(new KeyValuePair<string, string>("password", "123123123"));
  7. //Dictionary也是实现了IEnumerable接口的,所以也可以这样传值
  8. Dictionary<string, string> nameValues = new Dictionary<string, string>();
  9. nameValues["userName"] = "admin123";
  10. nameValues["password"] = "";
  11. FormUrlEncodedContent content = new FormUrlEncodedContent(nameValues);
  12. HttpResponseMessage msg= await hc.PostAsync("http://127.0.0.1:8081/Home/Login", content);
  13. //msg.Content;返回的Http报问题
  14. //msg.Headers;获得响应头
  15. //msg.StatusCode;获得响应的状态码
  16.  
  17. }

发送一个POST字符串请求:

  1. private async void button3_Click(object sender, EventArgs e)
  2. {
  3. string json = "{userName:'admin',password:'123'}";
  4. HttpClient client = new HttpClient();
  5. StringContent content = new StringContent(json);
  6. //contentype 设置协议类型,必不可少
  7. content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
  8. var respMsg = await client.PostAsync("http://127.0.0.1:6666/Home/Login2/", content);
  9. string msgBody = await respMsg.Content.ReadAsStringAsync();
  10. }

发送一个POST,Multipart 表单上传请求:

  1. private async void button4_Click(object sender, EventArgs e)
  2. {
  3. HttpClient client = new HttpClient();
  4. MultipartFormDataContent content = new MultipartFormDataContent();
  5. content.Headers.Add("UserName", "admin");
  6. content.Headers.Add("Password", "");
  7. //先读取文件
  8. using (Stream stream = File.OpenRead(@"D:\temp\xx.png"))
  9. {
  10. // 放入流中 上传接口协议名file 文件名
  11. content.Add(new StreamContent(stream), "file", "logo.png");
  12. var respMsg = await client.PostAsync("http://127.0.0.1:6666/Home/Upload/", content);
  13. string msgBody = await respMsg.Content.ReadAsStringAsync();
  14. MessageBox.Show(respMsg.StatusCode.ToString());
  15. MessageBox.Show(msgBody);
  16. }
  17. }

多线程之HttpClient的更多相关文章

  1. Android-——多线程之Handler(转)

    Android--多线程之Handler 原文地址:http://www.cnblogs.com/shirley-1019/p/3557800.html 前言 Android的消息传递机制是另外一种形 ...

  2. iOS多线程之8.NSOPeration的其他用法

      本文主要对NSOPeration的一些重点属性和方法做出介绍,以便大家可以更好的使用NSOPeration. 1.添加依赖 - (void)addDependency:(NSOperation * ...

  3. python 线程之 threading(四)

    python 线程之 threading(三) http://www.cnblogs.com/someoneHan/p/6213100.html中对Event做了简单的介绍. 但是如果线程打算一遍一遍 ...

  4. python 线程之 threading(三)

    python 线程之 threading(一)http://www.cnblogs.com/someoneHan/p/6204640.html python 线程之 threading(二)http: ...

  5. python 线程之_thread

    python 线程之_thread _thread module: 基本用法: def child(tid): print("hello from child",tid) _thr ...

  6. [深入浅出WP8.1(Runtime)]网络编程之HttpClient类

    12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...

  7. Java多线程之ConcurrentSkipListMap深入分析(转)

    Java多线程之ConcurrentSkipListMap深入分析   一.前言 concurrentHashMap与ConcurrentSkipListMap性能测试 在4线程1.6万数据的条件下, ...

  8. 【C#】线程之Parallel

    在一些常见的编程情形中,使用任务也许能提升性能.为了简化变成,静态类System.Threading.Tasks.Parallel封装了这些常见的情形,它内部使用Task对象. Parallel.Fo ...

  9. iOS多线程之GCD小记

    iOS多线程之GCD小记 iOS多线程方案简介 从各种资料中了解到,iOS中目前有4套多线程的方案,分别是下列4中: 1.Pthreads 这是一套可以在很多操作系统上通用的多线程API,是基于C语言 ...

随机推荐

  1. C# 判断字符串是否左包含

    //测试字符串 左包含 //string str = "AAABBBCCC"; //char[] ss = str.ToArray(); //0-8 字符数组 //char[] s ...

  2. react构建前端项目方法汇总

    react简介: 一.使用react 创建一个PC端的项目 (a):使用 yemon 创建一个 webpack 的 react 的项目 控制台安装并且产看 yemon 的版本 yo -v (b): 全 ...

  3. Axure RP 9 WIN10 64位安装步骤及注册码

    License栏输入:ABC Key栏输入:M5PHzBHvhAG3cNRr2CFxAJaIHaXOkwleDSctQ9sY0pQ2vd7eJzoBNtD7zBZNSPmT http://www.zh ...

  4. Python爬虫:HTTP协议、Requests库(爬虫学习第一天)

    HTTP协议: HTTP(Hypertext Transfer Protocol):即超文本传输协议.URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源. HTTP协议 ...

  5. java8方式日期比较

    static ZoneId ZONEID_BJ = ZoneId.of("GMT+08:00"); private boolean sameDate(Date d1, Date d ...

  6. 爬虫写法进阶:普通函数--->函数类--->Scrapy框架

    本文转载自以下网站: 从 Class 类到 Scrapy https://www.makcyun.top/web_scraping_withpython12.html 普通函数爬虫: https:// ...

  7. ecshop3 调用指定分类下推荐/热卖/新品商品,可指定调用数量

    第一步:--------------------------------------------------------------------------------------/** * 取指定分 ...

  8. poj 2186 强连通+缩点

    题意:有一群牛,求被所有牛都认可的牛的个数 每个连通分量建一个缩点,出度为零的缩点包含的点的个数即为要求值 如果有多个出度为零的,直接输出零,否则输出那唯一一个出度为零的缩点包含的点的个数 #incl ...

  9. C#--委托的同步,异步,回调函数

    原文地址 同步调用 委托的Invoke方法用来进行同步调用.同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行. using System; using System. ...

  10. ubuntu-ln命令

    安装软件完成后,常常需要使用ln命令来将命令重新定义一下路径,就相当于windows中的加入系统环境变量的意思 ~ sudo ln -s /home/spike/Downloads/redis/src ...