链接地址 https://www.cnblogs.com/mykcode/p/7833090.html

在程序用调用 Http 接口、请求 http 资源、编写 http 爬虫等的时候都需要在程序集中进行 Http 请 求。  很多人习惯的 WebClient、HttpWebRequest 在 TPL 下很多用起来不方便的地方,TPL 下推荐使 用 HttpClient(using System.Net.Http;)。

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

  HttpClient发出Post请求使用Task<HttpResponseMessage> PostAsync(string requestUri, HttpContent content) 方法,第一个参数是请求的地址,第二个参数就是用来设置请求内容的。HttpContent 是 抽象类,主要的子类有 FormUrlEncodedContent(表单格式请求)、 StringContent(字符串 请求)、 MultipartFormDataContent(Multipart 表单请求,一般带上传文件信息)、 StreamContent(流内容)。使用提前写好的“HttpClient 用测试服务器端”部署到 IIS,然 后方便测试。

注意以下例子都以例子a,中的方式一为基准。代码都是放到async标记的方法里面

a)表单格式请求,报文体是“userName=admin&password=123”这样的格式

方式一:
private async Task<stirng> test()
{
  HttpClient client = new HttpClient();
  Dictionary<string, string> keyValues = new Dictionary<string, string>();
  keyValues["userName"] = "admin";
  keyValues["password"] = "123";
  FormUrlEncodedContent content = new FormUrlEncodedContent(keyValues);
  var respMsg = await client.PostAsync("请求的链接URL",content);// 不要错误的调用 了 PutAsync,应该是 PostAsync
  string msgBody = await respMsg.Content.ReadAsStringAsync(); MessageBox.Show(respMsg.StatusCode.ToString()); MessageBox.Show(msgBody);
  return "ok";
} 方式二:
private Task<stirng> test()
{
  HttpClient client = new HttpClient();
Dictionary<string, string> keyValues = new Dictionary<string, string>();
keyValues["userName"] = "admin"; keyValues["password"] = "123";
FormUrlEncodedContent content = new FormUrlEncodedContent(keyValues);
var respMsg = client.PostAsync("http://127.0.0.1:6666/Home/Login/", content);
// 不要错误的调用 了 PutAsync,应该是 PostAsync
HttpResponseMessage mess = respMsg.Result; Task<string> msgBody = mess.Content.ReadAsStringAsync(); MessageBox.Show("OK");
  //msgBody.Result会阻止当前线程的继续执行,等待要执行线程结束
  MessageBox.Show(msgBody.Result);   return "ok";
}

b)普通字符串做报文

string json = "{userName:'admin',password:'123'}";
HttpClient client = new HttpClient();
StringContent content = new StringContent(json);
//contentype 必不可少 content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
var respMsg = await client.PostAsync("地址URL", content);
string msgBody = await respMsg.Content.ReadAsStringAsync();
MessageBox.Show(respMsg.StatusCode.ToString());
MessageBox.Show(msgBody);

c)上传文件

HttpClient client = new HttpClient();
MultipartFormDataContent content = new MultipartFormDataContent();
content.Headers.Add("UserName","admin");
content.Headers.Add("Password", "123");
using (Stream stream = File.OpenRead(@"D:\temp\logo 透明.png"))
{
content.Add(new StreamContent(stream), "file", "logo.png");
var respMsg = await client.PostAsync("上传地址 URL", content);
string msgBody = await respMsg.Content.ReadAsStringAsync();
  MessageBox.Show(respMsg.StatusCode.ToString());
  MessageBox.Show(msgBody);
}

httpclient 用法的更多相关文章

  1. httpclient用法

    Http通信方式:HttpURLConnection和HttpClient HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便HttpClient就是一个增强版的 ...

  2. Android HttpClient 用法以及乱码解决

    一.Post提交 并可以实现多文件上传 // 创建DefaultHttpClient对象 HttpClient httpclient = new DefaultHttpClient(); // 创建一 ...

  3. HttpClient用法--这一篇全了解(内含例子)

    HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,它不仅使客户端发送Http请求变得容易,而且也方便开发人员测试接口(基于Http协议的),提高了开发的效率,也 ...

  4. HTTPCLIENT抓取网页内容

    通过httpclient抓取网页信息. public class SnippetHtml{ /** * 通过url获取网站html * @param url 网站url */ public Strin ...

  5. Android进阶笔记01:Android 网络请求库的比较及实战(一)

    在实际开发中,有的时候需要频繁的网络请求,而网络请求的方式很多,最常见的也就那么几个.本篇文章对常见的网络请求库进行一个总结. 一.使用HttpUrlConnection: 1. HttpUrlCon ...

  6. (6)ASP.NET Core 中使用IHttpClientFactory发出HTTP请求

    1.HttpClient类使用存在的问题 HttpClient类的使用所存在的问题,百度搜索的文章一大堆,好多都是单纯文字描述,让人感觉不太好理解,为了更好理解HttpClient使用存在的问题,下面 ...

  7. asp.net core 使用HttpClientFactory Polly实现熔断降级

    前言 在++NET Core2.1++后也是增加更新了很多东西,当然HttpClientFactory更新中的一部分.虽然说HttpClient这个实现了disposable,但使用它的时候用usin ...

  8. 第十七节:.Net Core中新增HttpClientFactory的前世今生

    一. 背景 1.前世 提到HttpClient,在传统的.Net版本中简直臭名昭著,因为我们安装官方用法 using(var httpClient = new HttpClient()),当然可以Di ...

  9. HttpClientFactory-向外请求的最佳

    简介 它的组件包是Microsoft.Extensions.Http 复原HttpClient带来的问题 HttpClient相关问题 虽然HttpClient类实现了IDisposable,但不是首 ...

随机推荐

  1. TZOJ 4839 麦森数(模拟快速幂)

    描述 形如2^P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有9 ...

  2. Java计算图的匹配率

    2016-07-02 大概意思就是这样了,代码里我貌似没有计算最后一步,但是原理都是一样的.....R1有5个点P1有四个点,他们共同的点是4个,那就是共同点4*4/(R1的5个点*P1的四个点就是0 ...

  3. URL传入带有%的参数的解决方法

    在参数中含有%时,需要将其转义为它的编码格式%25 ,后面跟对应字符的ASCII(16进制)码值 如我想要传入参数mm=75%到后台,就需要对%进行编码为%25,所以实际输入的参数是mm=75%25 ...

  4. 安装phpcms时出现Warning: ob_start(): output handler \'ob_gzhandler\' conflicts with \'zlib

    1. 解决方法一: 打开phpcms/base.php,在第57行,修改如下: if(pc_base::load_config('system','gzip') && function ...

  5. .NET获得上传图片宽高

    代码: //图片大小限制--------------------------- System.Drawing.Image txtStoryimage = System.Drawing.Image.Fr ...

  6. Maven系列(十)发布自己的项目到 Maven 中央仓库

    Maven 发布自己的项目到 Maven 中央仓库 可能很多人都在用 Maven 仓库,但是如果要问怎么发布项目到中央仓库,估计很多人都不知道了,下面本篇文章带大家往中央仓库发布一个自己的 Maven ...

  7. 《JavaScript DOM编程艺术》笔记

    1. 把<script>标签放到HTML文档的最后,<body>标签之前能使浏览器更快地加载页面. 2. nodeType的常见取值 元素节点(1) 属性节点(2) 文本节点( ...

  8. shiro 实现 用户 a 操作b 的权限 ,用户 b 能够及时获知。b不需要退出登陆 。 关闭鉴权缓存,或者不配置缓存

    <bean id="myRealm" class="com.diancai.util.MyRealm"> <property name=&qu ...

  9. pyspider示例代码四:搜索引擎爬取

    搜索引擎爬取 #!/usr/bin/env python # -*- encoding: utf- -*- # Created on -- :: # Project: __git_lab_fix fr ...

  10. Ehcache配置参数简介

    < defaultCache         maxElementsInMemory = "10000"         maxElementsOnDisk = " ...