兼容https协议 建议.net framework4.6以上版本
/// <summary>
/// HttpWebRequest请求API数据
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="jsonstr">参数</param>
/// <param name="token">Bearer token 如有需要</param>
/// <param name="success">返回状态 true or false</param>
/// <param name="errormsg">返回错误消息</param>
/// <returns>返回结果 string</returns>
public string PostJsonData(string url, string jsonstr, string token, out bool success, out string errormsg)
{
GC.Collect();//垃圾回收,回收没有正常关闭的http连接
success = true;
errormsg = "";
string result = "";
HttpWebRequest request = null;
HttpWebResponse response = null;
Stream reqStream = null;
try
{
//设置最大连接数
ServicePointManager.DefaultConnectionLimit = 200;
//设置https验证方式
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
}
request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.Timeout = int.MaxValue;
if (!string.IsNullOrWhiteSpace(token))
{
request.Headers.Add("Authorization", "Bearer " + token);
}
if (!string.IsNullOrWhiteSpace(jsonstr))
{
byte[] btData = Encoding.UTF8.GetBytes(jsonstr);
request.ContentLength = btData.Length;
request.ContentType = "application/json";
//往服务器写入数据
reqStream = request.GetRequestStream();
reqStream.Write(btData, 0, btData.Length);
reqStream.Close();
}
//获取服务端返回
response = (HttpWebResponse)request.GetResponse();
//获取服务端返回数据
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
result = sr.ReadToEnd().Trim();
sr.Close();
}
catch (Exception ex)
{
success = false;
errormsg = ex.Message.ToString();
}
finally
{
//关闭连接和流
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
}
return result;
} public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
//直接确认,否则打不开
return true;
}