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 ...
随机推荐
- rfid串口dma_delay()引发的问题
接rfid读卡器的串口,有dma_delay()时,会有问题 现象是: 规律性的错误 解决办法:去掉dma_delay()即可
- AttributeError: module 'requests' has no attribute 'get' 报错分析
这个报错与代码时没有关系 当文件名与调用模块名重合时,系统找不到我们调用的requests模块. 在命名时,我们要注意不要重合.
- BUG: kernel NULL pointer dereference, address: 0000000000000008
问题现象:有台实例是用于压测用的,只要是做TCP连接数压测时,连接数超过100多就会自动重启,各种日志里面看不到任何关于重启的报错 xxx云服务器供应商技术支持,后台工具检测到有panic迹象,但不确 ...
- 测开-面试题-OS、Linux、算法、其他
1 OS 1.1 进程.线程.协程区别? 答: 1.进程是资源分配的单位:2.线程是CPU调度的单位:3.协程是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在 ...
- vue-cli-serve启动报错
报错信息: > vue-cli-service serve INFO Starting development server... 10% building 2/2 modules 0 acti ...
- DRF过滤Filtering
过滤Filtering 对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-filter扩展来增强支持. pip install django-filter 在配置文件中增加过滤后端的 ...
- C++ STL中的二分法
二分法介绍 狭义的二分法是一种在有序的数组中查找是否存在某个值的算法.广义的二分法不一定需要显式的数组,只需要有序的解空间即可.(此处解空间借用线性代数的称谓,仅表示所有合法解的集合,与线性代数无关) ...
- VUE学习-自定义修饰符
自定义修饰符 组件 const myComponent = { template: `<input type="text" :value="modelValue&q ...
- Ansible scp Python脚本
import osimport paramiko def RemoteScp(host_ip, host_port, host_username, host_password, remote_path ...
- Svn Linux 启动
svnserve -r -d /svn 后面是svn 安装目录