在程序用调用 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"] = "";
  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"] = "";
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", "");
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);
}

.net HttpClient的使用的更多相关文章

  1. HttpClient的替代者 - RestTemplate

    需要的包 ,除了Spring的基础包外还用到json的包,这里的数据传输使用json格式 客户端和服务端都用到一下的包 <!-- Spring --> <dependency> ...

  2. 关于微软HttpClient使用,避免踩坑

    最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...

  3. 使用HttpClient的优解

    新工作入职不满半周,目前仍然还在交接工作,适应环境当中,笔者不得不说看别人的源码实在是令人痛苦.所幸今天终于将大部分工作流畅地看了一遍,接下来就是熟悉框架技术的阶段了. 也正是在看源码的过程当中,有一 ...

  4. Java的异步HttpClient

    上篇提到了高性能处理的关键是异步,而我们当中许多人依旧在使用同步模式的HttpClient访问第三方Web资源,我认为原因之一是:异步的HttpClient诞生较晚,许多人不知道:另外也可能是大多数W ...

  5. 揭秘Windows10 UWP中的httpclient接口[2]

    阅读目录: 概述 如何选择 System.Net.Http Windows.Web.Http HTTP的常用功能 修改http头部 设置超时 使用身份验证凭据 使用客户端证书 cookie处理 概述 ...

  6. C#中HttpClient使用注意:预热与长连接

    最近在测试一个第三方API,准备集成在我们的网站应用中.API的调用使用的是.NET中的HttpClient,由于这个API会在关键业务中用到,对调用API的整体响应速度有严格要求,所以对HttpCl ...

  7. HttpClient调用webApi时注意的小问题

    HttpClient client = new HttpClient(); client.BaseAddress = new Uri(thisUrl); client.GetAsync("a ...

  8. HttpClient相关

    HTTPClient的主页是http://jakarta.apache.org/commons/httpclient/,你可以在这里得到关于HttpClient更加详细的信息 HttpClient入门 ...

  9. Atitit.http httpclient实践java c# .net php attilax总结

    Atitit.http httpclient实践java c# .net php attilax总结 1. Navtree>> net .http1 2. Httpclient理论1 2. ...

  10. 使用httpclient发送get或post请求

    HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...

随机推荐

  1. repo搭建

    [root@op-yum01]# cat /home/work/yumdata/rsync-reposync.sh #!/bin/bash #Purpose: Sync centos7 repos v ...

  2. kvm虚拟化之kvm虚拟机控制台登陆

    vm虚拟机能否像xen虚拟机一样通过virsh console 一样采用字符界面进行linux虚拟机控制台呢,答案是肯定的,默认情况下该命令是不起作用的,需要修改相关文件才能实现. 1. 配置方法如下 ...

  3. UML图基础

    UML(Unified Model Language)统一建模语言,是对象管理组织(OMG)制定的一个通用的.可视化的建模标准语言,可以用来可视化.描述.构造和文档化软件密集型系统的各种工作.在学习设 ...

  4. word的xml文件中空白页和换页

    ■ word中分页符(插入空白页): <w:r>                    <w:rPr>                    <w:rFonts w:as ...

  5. c++和java在桌面应用软件开发的区别

    之前一直用c/c++比较多.最近做的事情用java写了个小程序.发现java的工具包很多而且好找,c++的桌面应用工具包就不好找了. java在项目的buildpath里添加外部jar包即可,c++需 ...

  6. 2016级算法第一次练习赛-A.群鸦的盛宴

    858 群鸦的盛宴 题目链接:https://buaacoding.cn/problem/858/index 思路 本题乍一眼看过去,你可能会想到使用一个二维数组A[51][51]来记录从i到j的路线 ...

  7. 在swift工程调用第三方库,Bridging导入头文件提示not found解决办法

    swift语言简洁,上手之后感觉还不错,今天在使用swift调用cocoapods的AFNetworking时候总是提示“'AFNetworking/AFNetworking.h' file not ...

  8. Kettle 解决数据锁的问题(事务(进程 ID 51)与另一个进程被死锁在 锁 资源上)

    1.Kettle做了一个作业, 执行的时候问题发生在步骤2和步骤3之间,也就是步骤2还未完全执行完的时候,步骤3就要更新步骤2插入的数据,造成死锁.(我的理解是既然都分开作业了,那么每个作业都是一个单 ...

  9. 基础篇:6.4)形位公差-基准 Datum

    本章目标:了解形位公差基准及运用. 1.定义: 基准 —  与被测要素有关且用来定义其几何位置关系的一个几何理想要素(如轴线.直线.平面等): —  可由零件上的一个或多个基准要素构成. 模拟基准要素 ...

  10. Linux下如何将文件下载到指定目录

    一.问题描述 当我在搭服务器的时候,发现由于下载的东西太多,所以需要将一些安装包下载到指定的目录下. 二.解决办法 wget -P /usr/test http://download.redis.io ...