httpclint的传值和访问https
一、StringContent与FormUrlEncodedContent
可参考这篇文章写的非常好: https://blog.csdn.net/lxrj2008/article/details/77840453
本文是一个很另类的文章,在项目中用的比较少,但如果项目中真的出现了这种情况,我们也需要知道如何去解决,对于知识点StringContent和FormUrlEncodedContent我们应该了解的多一点,FormUrlEncodedContent是以键/值对的形式进行POST数据的提供,同时要求服务端以x-www-form-urlencoded的方式去接收数据!而StringContent是ByteArrayContent的一个子集,也是MultipartFormDataContent的一个子集,在进行大数据传输时,我们需要使用这种方法,如果传递的是字符串,可以采用StringContent,如果是二进制流,可以使用ByteArrayContent,而这两种方式都可以对外以MultipartFormDataContent的形式体现,而在服务端要以mutipart/form-data的方式来接收数据!
二、请求https(httpclient)
private static HttpClient client => GetHttpClient();
/// <summary>
/// 获取HttpClient实例
/// </summary>
/// <returns></returns>
private static HttpClient GetHttpClient()
{
if (JSONURL_RYW.StartsWith("https://")) return new HttpClient(GetHttpClientHandler(true));
return new HttpClient();
}
/// <summary>
/// 获取HttpClientHandler对象实例
/// </summary>
/// <param name="ishttps">是否https</param>
/// <returns></returns>
private static HttpClientHandler GetHttpClientHandler(bool ishttps)
{
var handler = new HttpClientHandler()
{
ClientCertificateOptions = ClientCertificateOption.Automatic,
ServerCertificateCustomValidationCallback = (message, cer, chain, errors) => true
};
if (ishttps) return handler;
return null;
}
三、httpwebrequest
public static async Task<string> PostApiControllerAsync(string url, string body)
{
if (url.StartsWith("https://"))
{
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
}
Encoding encoding = Encoding.UTF8;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.Accept = "text/html, application/xhtml+xml, */*";
request.ContentType = "application/json";
var hc = IOC.GetServer<IHttpContextAccessor>();
if (hc == null) { throw new Exception("无上下文环境"); }
request.Headers.Add("Authorization", hc.HttpContext.Request.Headers["Authorization"].ToStringWithDefault());
request.Headers.Add("Authorization_DSST", hc.HttpContext.Request.Headers["Authorization_DSST"].ToStringWithDefault());
byte[] buffer = encoding.GetBytes(body);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return await reader.ReadToEndAsync();
}
}
public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
//直接确认,否则打不开
return true;
}
四、https访问模型(图片来源于网络)

五、传值
//增加头部
httpClient.DefaultRequestHeaders.Add("head", "test");
//添加认证
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token)
//表单传值
var fromContent = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string,string>("test","test")
});
//表单传值 Dictionary<string, string> keyValuePairs)
public static async Task<string> PostOtherSysAsync(string url, Dictionary<string, string> keyValuePairs)
{
var formParam = new FormUrlEncodedContent(keyValuePairs);//表单类型 HttpResponseMessage response = await client.PostAsync(new Uri(url), formParam);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
return responseBody;
}
//body传值,一般就是json或者text/html 、application/javascript 、text/plain、 application/xml这种传输格式的,这种都要指定ContentType
var jsonContent = new StringContent(json);
jsonContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
httpclint的传值和访问https的更多相关文章
- C# 访问https 未能创建 SSL/TLS 安全通道
C# 访问https请求被中止: 未能创建 SSL/TLS 安全通道(Could not create SSL/TLS secure channel) 一般GetResponse可以直接访问https ...
- WebClient 访问https
解决SSH证书问题: webClient.getOptions().setUseInsecureSSL(true);//解决ssh证书访问https的问题
- AFNetworking 原作者都无法解决的问题: 如何使用ip直接访问https网站?
背景 最近App似乎有报异常是DNS无法解析,尝试解决此问题.搜集到的资料很少,甚至连AFN原作者都判定这可能是一个无解的问题,参见: https://github.com/AFNetworking/ ...
- 一招解决IE7无法访问https网页
很多人都遇到过这种情况: 自己的IE访问不了https的网页了,如果你百度的话,有人会告诉你注册一堆的dll文件,或者更改IE设置啦什么的.上午,我也遇到这个问题,这些方法都不管用.请教了高手,将方法 ...
- 源码编译安装 PHP5.5.0,解决curl_exec访问HTTPS返回502错误的问题(修改PATH路径)
最近碰到一个奇怪的问题, PHP使用 curl_exec 访问 HTTPS 网页时, 返回502错误, 访问HTTP网页时没有问题, 用 echo phpinfo() ; 查看, 支持op ...
- curl+个人证书(又叫客户端证书)访问https站点
摘自http://blog.csdn.net/chary8088/article/details/22990741 curl+个人证书(又叫客户端证书)访问https站点 目前,大公司的OA管理系统( ...
- 转 c#代码访问https服务器以及https的webservice
最近公司做到WebService项目,但是要通过Https调用,自己在网上搜了半天,终于实现了服务端的Https,但是一直没有找到客户端如何实现,今天终于看到这篇文章,随手记录下来. 具体代码如下: ...
- 解决python2.7.9以下版本requests访问https的问题
在python2.7.9以下版本requests访问https连接后,总会报一些关于SSL warning. 解决法子可以参考:https://urllib3.readthedocs.io/en/la ...
- 使用curl,libcurl访问Https
编译curl,libcurl 下载curl源码(git clone https://github.com/curl/curl),在目录curl\winbuild\BUILD.WINDOWS.txt文件 ...
- Python使用requests模块访问HTTPS网站报错`certificate verify failed`
使用requests模块访问HTTPS网站报错: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Nam ...
随机推荐
- 死磕rmi之 RegistryImpl
Registry初始化 可以把注册中心理解为特殊的远程对象,这个对象就像一个容器一样,存储其他远程对象. 可以本地直接调用四大方法,也可通过调用远程对象的方式调用. 查看一下类继承关系 可参照http ...
- EMQ X 系统调优和性能压测
前言 如果使用 EMQ 来承载百万级别的用户连接可以吗?毕竟在 MQTT 官方介绍上说 EMQ X 可以处理千万并发客户端,而 EMQ X 自己官方称 4.x 版本 MQTT 连接压力测试一台 8 核 ...
- 银河麒麟V10安装MySQL5.7
环境: Kylin-Server-10-SP2-Release-Build09-20210524-x86_64.isomysql-5.7.28-linux-glibc2.12-x86_64.tar ...
- Redis Stream类型的使用详解
目录 一.背景 二.redis中Stream类型的特点 三.Stream的结构 四.Stream的命令 1.XADD 往Stream末尾添加消息 1.命令格式 2.举例 2.XRANGE查看Strea ...
- C# DevExpress中GridControl控件的基本属性设置和使用方法
1.GridControl隐藏GroupPanel(主面板) 隐藏:鼠标单击Run Designer-OptionsView-ShowGroupPanel=False; 修改:鼠标单击Run Desi ...
- 【C学习笔记】day5-3 编写代码模拟三次密码输入的场景
3.编写代码模拟三次密码输入的场景. 最多能输入三次密码,密码正确,提示"登录成功",密码错误, 可以重新输入,最多输入三次.三次均错,则提示退出程序. #define _CRT_ ...
- TCP协议之四次挥手
参考文章 这里 四次挥手过程 四次挥手的过程是全双工的,因此每个方向都必须要进行单独的关闭,这样原则是当一方完成数据发送后发送一个FIN信号给对方,对方收到FIN后就知道这个方向不会再有数据发送过来了 ...
- 【剑指Offer】【栈】栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- kolla
kolla项目是为了容器化openstack,目标是做到100个节点的开箱即用,所有的组件的HA都具备.kolla是一个革命性的项目,我们以前积累的安装部署经验,全部都报废.使用kolla可以快速部署 ...
- JavaSE——遍历字符串与统计字符个数
package com.zhao.stringtest; import java.util.Scanner; public class test2 { //键盘录入一个字符串,统计该字符串中大写字母, ...