C# HttpClient类库
示例代码:
1 using System.Net.Http;
2 using System.Net.Http.Headers;
3 using System.Threading.Tasks;
4
5 namespace MachineServer
6 {
7 public static class HttpHelper
8 {
9 public static HttpClient HttpClient { get; set; }
10
11 public static void InitializeClient()
12 {
13 //单例模式
14 if (HttpClient == null)
15 {
16 HttpClient = new HttpClient();
17 }
18
19 HttpClient.DefaultRequestHeaders.Accept.Clear();
20 HttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
21
22 //能解读https类型
23 //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
24 }
25
26 /// <summary>
27 /// Get方法
28 /// </summary>
29 /// <param name="url">目标链接(含参数)</param>
30 /// <returns>返回的字符串</returns>
31 public static async Task<string> GetAsync(string url)
32 {
33 using (HttpResponseMessage response = await HttpClient.GetAsync(url))
34 {
35 response.EnsureSuccessStatusCode();
36 string result = await response.Content.ReadAsStringAsync();
37 return result;
38 }
39 }
40
41 /// <summary>
42 /// Post方法
43 /// </summary>
44 /// <param name="url">目标链接</param>
45 /// <param name="json">发送的json格式的参数字符串</param>
46 /// <returns>返回的字符串</returns>
47 public static async Task<string> PostAsync(string url, string json)
48 {
49 StringContent content = new StringContent(json);
50 content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
51
52 using (HttpResponseMessage response = await HttpClient.PostAsync(url, content))
53 {
54 response.EnsureSuccessStatusCode();
55 string result = await response.Content.ReadAsStringAsync();
56 return result;
57 }
58 }
59
60 /// <summary>
61 /// Post方法
62 /// </summary>
63 /// <param name="url">目标链接</param>
64 /// <param name="json">发送的json格式的参数字符串</param>
65 /// <returns>返回的字符串</returns>
66 public static async Task<string> PostAsync(string url, HttpContent content)
67 {
68 //HttpContent content = new FormUrlEncodedContent(new Dictionary<string, string>()
69 // {
70 // { "token", token},
71 // { "orderNo", orderNo}
72 // });
73 content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded") { CharSet = "utf-8" };
74
75 using (HttpResponseMessage response = await HttpClient.PostAsync(url, content))
76 {
77 response.EnsureSuccessStatusCode();
78 string result = await response.Content.ReadAsStringAsync();
79 return result;
80 }
81 }
82 }
83 }
Get方法
get方法传递参数,是将参数及其值直接跟在url后面,以?开始,中间用&间隔,类似:
string tokenString = await HttpHelper.GetAsync($"https://er.com/Apps/Mes/getToken?appKey=11&nonce=22×tamp=33&signature=44");
Post方法
post方法传递参数有几种形式,需要看HTTP服务端那边支持哪种,客户端用时,需要将Header的ContentType设置正确。
总结以下三种:
1. json格式:
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
对应Postman中:
2. form-data格式:
content.Headers.Remove("Content-Type");
content.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundarypy5dIaqJBcHjn7sv");
对应Postman中:
3. x-www-form-urlencoded格式:
content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded") { CharSet = "utf-8" };
对应Postman中:
已测试Post方法的x-www-form-urlencoded方式使用成功
C# HttpClient类库的更多相关文章
- HttpClient 4.5.x 工具类设计与实现
最近,业务需要在java服务端发起http请求,需要实现"GET","POST","PUT"等基本方法.于是想以 "HttpCli ...
- HttpClient请求服务器代码优化版
HttpClient请求服务器代码优化版 首先,我在前面的两篇博文中介绍了在 Android中,除了使用java.net包下HttpUrlConnection的API访问HTTP服务之外,我们还可以换 ...
- Android使用HttpClient请求服务器代码优化版
首先,我在前面的两篇博文中介绍了在Android中,除了使用java.net包下HttpUrlConnection的API访问HTTP服务之外,我们还可以换一种途径去完成工作.Android SDK附 ...
- JAVA发送HttpClient
http://bijian1013.iteye.com/blog/2310211 在发送HTTP请求的时候会使用到POST和GET两种方式,如果是传送普通的表单数据,我们直接将参数到一个Key-val ...
- Excel催化剂开源第41波-网抓网络采集类库及工具分享
在VBA开发网抓程序中,会用到xmlhttp/winHttp.winHttprequest.5.1等组件,当时笔者也是这样进入了网抓领域的,这些都是非常过时的东西,在.Net的开发中,有大量的更好用的 ...
- Spring Boot 中使用 HttpClient 进行 POST GET PUT DELETE
有的时候,我们的 Spring Boot 应用需要调用第三方接口,这个接口可能是 Http协议.可能是 WebService.可能是 FTP或其他格式,本章讨论 Http 接口的调用. 通常基于 Ht ...
- 第一个web框架tornado
简介 tornado,是我学到的第一个web框架是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google ...
- Android开源库--Asynchronous Http Client异步http客户端
如果说我比别人看得更远些,那是因为我站在了巨人的肩上. github地址:https://github.com/loopj/android-async-http Api文档地址:http://loop ...
- Android中使用HTTP服务
在Android中,除了使用java.net包下的API访问HTTP服务之外,我们还可以换一种途径去完成工作.Android SDK附带了Apache的HttpClient API.Apache Ht ...
随机推荐
- 基于Python的某大学某学院新生高考成绩分析
# coding=gbk import pandas as pd import numpy as np import matplotlib.pyplot as plt from pylab impor ...
- Arduino+ESP32 之 驱动GC9A01圆形LCD(一),基于Arduino_GFX库
最近买了一块圆形屏幕,驱动IC是GC9A01,自己参考淘宝给的stm32的驱动例程, 在ubuntu下使用IDF开发ESP32,也在windows的vscode内安装IDF开发ESP32,虽然都做到了 ...
- Flutter Windows 桌面端支持进入稳定版
Flutter 创建伊始,我们就致力于打造一个能够构建精美的.可高度定制的.并且可以编译为机器码的跨平台应用解决方案,以充分发挥设备底层硬件的全部图形渲染能力.今天,Flutter 对 Windows ...
- winSCP上传文件到服务器失败,提示permission denied,返回码3
1.查看sftp服务在你服务器的路径 cat /etc/ssh/sshd_config | grep sftp 2.在winSCP进行连接设置 设置好你的主机名.端口.用户名和密码,然后点击高级,点击 ...
- Swift可选类型
可选类型 可选类型的介绍 注意: 可选类型时swift中较理解的一个知识点 暂时先了解,多利用Xcode的提示来使用 随着学习的深入,慢慢理解其中的原理和好处 概念: 在OC开发中,如果一个变量暂停不 ...
- mysql连接出错:ERROR 1040 (HY000): Too many connections
1.查看mysql的最大连接数:show variables like '%max_connections%'; 2. 查看服务器响应的最大连接数: 3. 设置最大连接数: set GLOBAL m ...
- 虚拟机与Docker
https://www.cnblogs.com/kex1n/p/6933039.html https://blog.csdn.net/jingzhunbiancheng/article/details ...
- rsync 远程同步部署——上下行同步
rsync 远程同步部署--上下行同步 1.rsync (Remote Sync,远程同步) : 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用 ...
- 服务器硬件及RAID配置实践
服务器硬件及RAID配置实践 1.RAID磁盘阵列介绍 2.创建RAID磁盘阵列 1.RAID:中文简称为独立冗余磁盘阵列 把多块独立的物理硬盘按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供 ...
- python多版本切换
环境:Macbook MacOS自带的python2.7,在命令行中输入python后会显示2.7版本 如何切换成新版本? 一.修改用户配置环境变量~/.bash_profile 确定新版本的安装位置 ...