一、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. TP框架在nginx中的配置

    TP框架配置中默认URL_MODEL=1,而Nginx默认是不支持PATHINFO的.如果我们只想跑起来tp框架,很简单,只需到更改TP配置,设置URL_MODEL=3(兼容模式).但是如果要让Ngi ...

  2. Occlusion(遮挡剔除)

    Occlusion 1.视锥体剔除(Frustum Culling) 根据摄像机的视见体的范围对场景模型进行剔除操作,在视见体以外的物体不被渲染,但是在视见体中的物体会以离摄像机最远的物体开始渲染,逐 ...

  3. sqlserver 通过.mdf 和.ldf 恢复数据库

    USE master;GOCREATE DATABASE ImageManager ON (FILENAME = 'D:\LD\计时器demo\winform图片上传DB\ImageManager.m ...

  4. Hsm状态机init()和dispatch()流程

    (LCA)共同祖先状态:首先找到s(原状态)能处理t(目标状态)的超状态,然后找到t(目标状态)到上一步超状态的退出路径p[]并保存,最后沿着退出路径进入t目标状态. QHsm_dispatch_(Q ...

  5. 只会Jquery,后端程序员如何学会前端(webpack,react,babel,es5,es6)

    写在前 希望通过短暂的学习,可以达到一下目标: 1.能看懂现在前端的工程化手段 2.知道当前前端群体中大致的解决问题的思路 3.当前的问题在哪里,技术发展趋势是什么 4.建立起自己的认知模型 文章内容 ...

  6. golang 中使用mysql报错:“ scannable dest type slice with >1 columns (4) in result”

    query := fmt.Sprintf("SELECT .... infos = make([]*struct, 0, 10) err = s.db.GetContext(ctx, &am ...

  7. VUE学习-插槽

    插槽 匿名插槽 子组件设置匿名插槽 <script type="text/x-template" id="custom-comp"> <div ...

  8. 关于elasticsearch使用ceph作为存储

    首先关于这个问题本人已经持续关注很长时间了,先说结果--elasticsearch(ES)不适合不适合不适合使用分布式存储.测试环境当然无所谓!!! 以下是相关资料的链接(持续更新): 1.https ...

  9. Java并发编程 —— synchronized关键字

    一.是什么?(作用) synchronized关键字解决了多个线程之间访问资源的同步性问题,保证了被其修饰的方法或是代码块在任意时刻只能有一个线程执行. 而在早期的Java版本中,synchroniz ...

  10. Springboot+Vue实现短信与邮箱验证码登录

    体验网址:http://mxyit.com 示例 1.新增依赖 <!-- 短信服务 --> <dependency> <groupId>com.aliyun< ...