注意,数据内容需要使用WebUtility.UrlEncode编码,否则会出现Https接口错误
使用WebClient
public class WebClientEx: WebClient
{
public int Timeout{get;set;}
protected override WebRequest GetWebRequest(Url address)
{
var request = base.GetWebRequest(address);
request.Timeout = Timeout;
return request;
}
}
static public void PushTest()
{
string PostUrl = ConfigurationManager.AppSettings["PostTest"];
if(PostUrl == "")
{
Console.WriteLine("请配置PostUrl");
return;
}
Console.WriteLine("PostUrl="+ PostUrl);
string PostDelay = ConfigurationManager.AppSettings["PostDelay"]??"3";
int nDelay = int.Parse(PostDelay);
Console.WriteLine("PostDelay=" + nDelay);
string strData = @"{
""name"":""hallo"",
""id"":123456,
""thetime"":""2017/6/20 21:28:44""
}";
strData = "data="+WebUtility.UrlEncode(strData);
if (PostUrl.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
//ServicePointManager.SecurityProtocol =SecurityProtocolType.Tls12;// (SecurityProtocolType)3072 for .net4;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
}
//System.Net.WebClient wc = new WebClient();
WebClientEx wc = new WebClientEx();
wc.Timeout = nDelay*1000;
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");//可以post提交
wc.Encoding = Encoding.UTF8;
//string[] pinfo = ConfigurationManager.AppSettings["EnableProxy"].Split('|');
//if (pinfo[0].ToLower() == "true")
//{
// wc.Proxy = new WebProxy(pinfo[1], int.Parse(pinfo[2]));
//}
string result = "";
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
try
{
result = wc.UploadString(PostUrl, "POST", strData);
sw.Stop();
Console.WriteLine("Fun0 Ret=" + result);
Console.WriteLine("耗时=" + sw.ElapsedMilliseconds+" 毫秒");
}
catch (System.Exception ex)
{
sw.Stop();
Console.WriteLine("Fun0 Exception=" + ex.Message);
Console.WriteLine("耗时=" + sw.ElapsedMilliseconds + " 毫秒");
}
}
使用HttpWebRequest
public static void PushTest2()
{
string url = ConfigurationManager.AppSettings["PostTest"];
string body = @"{
""name"":""TEST"",
""id"":123456,
""thetime"":""2017/6/20 21:28:44""
}";
IDictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("data", body);
//HTTPSQ请求
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
Encoding charset = Encoding.UTF8;
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
//request.ProtocolVersion = HttpVersion.Version11;
//request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36";
//request.KeepAlive = true;
//request.CookieContainer = new CookieContainer();
//request.Headers["Accept-Language"] = "zh-CN,zh;q=0.9";
//request.Headers["token"] = "";
//request.Headers["Cookie"] = "username=aaaaaa; Language=zh_CN";
//request.Accept = "text/html, application/xhtml+xml, */*";
if (!(parameters == null || parameters.Count == 0))
{
StringBuilder buffer = new StringBuilder();
int i = 0;
foreach (string key in parameters.Keys)
{
if (i > 0)
{
buffer.AppendFormat("&{0}={1}", key, WebUtility.UrlEncode(parameters[key]));
}
else
{
buffer.AppendFormat("{0}={1}", key, WebUtility.UrlEncode(parameters[key]));
}
i++;
}
byte[] data = charset.GetBytes(buffer.ToString());
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
Console.WriteLine("Fun2 Ret=" + reader.ReadToEnd());
}
}
catch (System.Exception ex)
{
Console.WriteLine("Fun2 Exception=" + ex.Message);
}
}