//创建方法
public static string HttpPostFrom(string url)
{
string json = "";//返回json字符串
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);//创建请求
var keystorefile = "E:\\https证书以及demo\\https证书以及demo\\client.p12";//签名文件路径
var keypasswd = "$Zu6#3123?"; //签名文件密码
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;//设置安全协议
InstallCertificate("E:\\https证书以及demo\\https证书以及demo\\client.p12", "$Zu6#34PH?", StoreLocation.CurrentUser, StoreName.My);//导入证书
X509Certificate cer = new X509Certificate(keystorefile, keypasswd);//实例化x509的对象方法
ServicePointManager.ServerCertificateValidationCallback = RemoteCertificateValidate;//设置回调 为true
req.ClientCertificates.Add(cer); //放入请求的证书集
req.Proxy = null;//代理
req.Method = "post";//方法
req.ContentType = "application/x-www-form-urlencoded";//标头
//req.ContentType = "application/json";
req.Timeout = 600000;//超时时间
byte[] btbody = Encoding.UTF8.GetBytes(url);//转字节
req.ContentLength = btbody.Length;//设置字节长度
using (Stream st = req.GetRequestStream())//写入流
{
st.Write(btbody, 0, btbody.Length);
st.Close();
st.Dispose();
}
WebResponse wr = (HttpWebResponse)req.GetResponse();//获取返回
using (StreamReader sr = new StreamReader(wr.GetResponseStream()))//读取返回流
{
json = sr.ReadToEnd();
sr.Close();
sr.Dispose();
}
wr.Close();
//result = JsonConvert.DeserializeObject<ApiResult>(json);
}
catch (WebException ex)
{
json = "远程访问错误:\r\n" + ex.Message;
}
catch (Exception ex)
{
json = ex.Message;
}
return json;
}
private static bool RemoteCertificateValidate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
{
// trust any certificate!!!
System.Console.WriteLine(error);
//为了通过证书验证,总是返回true
//导入证书
public static bool InstallCertificate(string certFilePath, string password, StoreLocation location, StoreName storeName)
{
try
{
if (!File.Exists(certFilePath))
{
return false;
}
byte[] certData = File.ReadAllBytes(certFilePath);
X509Certificate2 cert = new X509Certificate2(certData, password, X509KeyStorageFlags.Exportable);
X509Store store = new X509Store(storeName, location);
store.Open(OpenFlags.MaxAllowed);
store.Remove(cert);
store.Add(cert);
store.Close();
return true;
}
catch (Exception ex)
{
return false;
}
}