/// <summary>
/// 返回JSon数据
/// </summary>
/// <param name="json">要处理的JSON数据</param>
/// <param name="url">要提交的URL</param>
/// <param name="authorCode">认证字符串</param>
/// <returns>返回的JSON处理字符串</returns>
public static string GetResponseData(string json, string url, string authorCode, string API_Token1)
{
HttpWebRequest request = null;
try
{
ServicePointManager.Expect100Continue = false;
byte[] bytes = Encoding.UTF8.GetBytes(json);
//初始化新的webRequst
//1. 创建httpWebRequest对象
//request = (HttpWebRequest)WebRequest.Create(url);
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version11;
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
//POST /k/v1/records.json HTTP/1.1
//2.初始化HttpWebRequest对象
request.Method = "POST";//Post或者get
request.ContentType = "application/json; charset=UTF-8";
request.ContentLength = bytes.Length;
request.KeepAlive = false;
request.AllowAutoRedirect = false;
request.Timeout = 30000;
request.ReadWriteTimeout = 30000;
request.Proxy = null;
//安全认证
request.Headers.Add("Authorization", "Basic " + authorCode);
request.Headers.Add("X-Cybozu-API-Token", API_Token1);
//request.ProtocolVersion = HttpVersion.Version11;
//ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;//SecurityProtocolType.Tls1.2;
//ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
//ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
//request.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
//3.附加要POST给服务器的数据到HttpWebRequest对象(附加POST数据的过程比较特殊,它并没有提供一个属性给用户存取,需要写入HttpWebRequest对象提供的一个stream里面。)
//request.CookieContainer = cookieContainer;
using (Stream stream = request.GetRequestStream())
{
stream.Write(bytes, 0, bytes.Length);
}
//4. 读取服务器的返回信息
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
return reader.ReadToEnd();
}
catch (Exception ex)
{
throw ex;
}
finally
{
request.ServicePoint.ConnectionLimit = 50;
request.AllowAutoRedirect = false;
///必须释放掉,不然同一个接口只能调用一次
request.Abort();
}
}
注意https和http的区别
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version11;
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true;
}