HTTP的工作方式是客户端与服务器之间的请求-应答协议。
而在客户端与服务器之间进行请求-响应时,Post是经常被用到的方法。
下面是C#中Post的具体实现
/// <summary>
/// Post 相关数据
/// </summary>
/// <param name="url">POST请求地址 </param>
/// <param name="postData">json格式的请求报文,例如:{"key1":"value1","key2":"value2"}</param>
/// <returns></returns>
public static string PostUrl(string url, string postData)
{
try
{
string result = "";
System.GC.Collect();
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.Timeout = 30000;
req.AllowAutoRedirect = false;
req.ContentType = "application/json;charset=UTF-8";
req.KeepAlive = true;
byte[] data = Encoding.UTF8.GetBytes(postData);
//req.ContentLength = data.Length;
//处理HttpWebRequest访问https有安全证书的问题( 请求被中止: 未能创建 SSL/TLS 安全通道。)
ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, sslPolicyErrors) => true;
//System.Net.ServicePointManager.DefaultConnectionLimit = 50;
//设置协议类型前设置协议版本
req.ProtocolVersion = HttpVersion.Version11;
//这里设置了协议类型。
ServicePointManager.SecurityProtocol = /*SecurityProtocolType.Ssl3 | */SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
// Thread.Sleep(1000);
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
//获取响应内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
if (resp != null)
{
resp.Close();
}
if (req != null)
{
req.Abort();
}
return result;
}
catch (Exception ex)
{
System.GC.Collect();
throw;
}
}