GetRequestStream 方法返回用于发送 HttpWebRequest 数据的流。返回 Stream 对象后,可以通过使用 Stream.Write 方法发送带有 HttpWebRequest 的数据。
public static string HttpPost(string url, string postData, int timeout, X509Certificate x509) { //设定安全协议为安全套接字层(SSL)3.0协议 ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; //用url生成一个HttpWebRequest实例 HttpWebRequest objRequest = (HttpWebRequest) WebRequest.Create(url); objRequest.Timeout = timeout; objRequest.Method = "POST"; objRequest.ContentLength = postData.Length; if (null != x509) { objRequest.ClientCertificates.Add(x509); } using (StreamWriter myWriter = new StreamWriter(objRequest.GetRequestStream())) { myWriter.Write(postData); } using (WebResponse response = objRequest.GetResponse()) { using (StreamReader sr = new StreamReader(response.GetResponseStream())) { return sr.ReadToEnd(); } } }
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
这段代码很重要,它设定安全协议。
SecurityProtocolType枚举有两个值
1)Ssl3 指定安全套接字层 (SSL) 3.0 安全协议。
2)Tls 指定传输层安全 (TLS) 1.0 安全协议。
如果url的形式为Https时,如果不设定安全协议,将报WebException异常。