一、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的更多相关文章

  1. C# 访问https 未能创建 SSL/TLS 安全通道

    C# 访问https请求被中止: 未能创建 SSL/TLS 安全通道(Could not create SSL/TLS secure channel) 一般GetResponse可以直接访问https ...

  2. WebClient 访问https

    解决SSH证书问题: webClient.getOptions().setUseInsecureSSL(true);//解决ssh证书访问https的问题

  3. AFNetworking 原作者都无法解决的问题: 如何使用ip直接访问https网站?

    背景 最近App似乎有报异常是DNS无法解析,尝试解决此问题.搜集到的资料很少,甚至连AFN原作者都判定这可能是一个无解的问题,参见: https://github.com/AFNetworking/ ...

  4. 一招解决IE7无法访问https网页

    很多人都遇到过这种情况: 自己的IE访问不了https的网页了,如果你百度的话,有人会告诉你注册一堆的dll文件,或者更改IE设置啦什么的.上午,我也遇到这个问题,这些方法都不管用.请教了高手,将方法 ...

  5. 源码编译安装 PHP5.5.0,解决curl_exec访问HTTPS返回502错误的问题(修改PATH路径)

    最近碰到一个奇怪的问题, PHP使用 curl_exec 访问 HTTPS 网页时, 返回502错误, 访问HTTP网页时没有问题,  用   echo   phpinfo() ;  查看, 支持op ...

  6. curl+个人证书(又叫客户端证书)访问https站点

    摘自http://blog.csdn.net/chary8088/article/details/22990741 curl+个人证书(又叫客户端证书)访问https站点 目前,大公司的OA管理系统( ...

  7. 转 c#代码访问https服务器以及https的webservice

    最近公司做到WebService项目,但是要通过Https调用,自己在网上搜了半天,终于实现了服务端的Https,但是一直没有找到客户端如何实现,今天终于看到这篇文章,随手记录下来. 具体代码如下: ...

  8. 解决python2.7.9以下版本requests访问https的问题

    在python2.7.9以下版本requests访问https连接后,总会报一些关于SSL warning. 解决法子可以参考:https://urllib3.readthedocs.io/en/la ...

  9. 使用curl,libcurl访问Https

    编译curl,libcurl 下载curl源码(git clone https://github.com/curl/curl),在目录curl\winbuild\BUILD.WINDOWS.txt文件 ...

  10. Python使用requests模块访问HTTPS网站报错`certificate verify failed`

    使用requests模块访问HTTPS网站报错: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Nam ...

随机推荐

  1. 浏览器调试工具devtool

    视频网址 先打开devtool,再打开命令菜单.可以用screenshot来截屏 $0:先在element点击元素,再在控制台输入$0,这个$0代表element中选中的DOM元素. $1,$2... ...

  2. 解决html2canvas.js和pdf.js导出页面问题

    最近在做项目时有这么一个需求,需要将当前html页面导出pdf到本地.由于之前是做过类似的功能的借助了两个插件分别是html2canvas.js和pdf.js,本以为是非常顺利就能完成的,实际在使用过 ...

  3. maven发布到本地仓库

    <distributionManagement> <repository> <id>localRepository</id> <url>fi ...

  4. react 04 生命周期

    生命周期的三个状态 mounting  : 组件插入到dom updating: 将数据更新到dom unmounting:将组件移除dom 生命周期的钩子函数 ComponentWillMount: ...

  5. Unix时间戳转化成普通日期

    var time = 1630634462000; //13位数 var unixTimestamp = new Date(time); var commonTime = unixTimestamp. ...

  6. React父组件如何调用子组件方法,访问子组件State

    /** * * Author: shujun * Date: 2020-10-25 */ import React from 'react'; import {message} from 'antd' ...

  7. ORACLE 遇到ORA-31693 ORA-31617 ORA-19505 ORA-27037

    今天发现生产的RAC环境expdp计划任务出现报错 之前一度认为是备份目录权限的问题 官方文档: MOS参考文档:DataPump Export (EXPDP) Fails With Errors O ...

  8. Software_C#_grammer_Deletegate--Strategy

    2018-04-30 18:59:04. 由 委托的 动态选择方法 联想到的 Strategy Pattern 一 : 策略模式 将  宿主   与  算法 分离, 算法被封装为对象, 客户端代码用 ...

  9. C++ 手动创建二叉树,并实现前序、中序、后序、层次遍历

    二叉树的创建是个麻烦事,我的思路是:首先将一个普通的二叉树转化为满二叉树,其中的空节点用一些标识数据来代替,如此一来,就可以用数组索引来描述数据在二叉树的什么位置了. 比如,数组[2,4,3,1,5, ...

  10. 高斯判别分析GDA推导与代码实现

    高斯判别分析GDA推导与代码实现 生成学习 处理分类问题,我们可以使用逻辑回归.Softmax.这两种方法都属于"判别学习",也就是给定 \((x^{(i)}, y^{(i)})\ ...