您的位置:首页 > 理论基础 > 计算机网络

C#利用HttpWebRequest进行post请求的示例(HTTPS)

2018-01-09 11:26 656 查看
代码如下:

[csharp] view plain copy

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net.Security;

using System.Security.Cryptography.X509Certificates;

using System.Net;

using System.IO;

using System.IO.Compression;

using System.Text.RegularExpressions;

namespace HttpWebRequestDemo

{

class Program

{

private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";

private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)

{

return true; //总是接受

}

public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters,Encoding charset)

{

HttpWebRequest request = null;

//HTTPSQ请求

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);

request = WebRequest.Create(url) as HttpWebRequest;

request.ProtocolVersion = HttpVersion.Version10;

request.Method = "POST";

request.ContentType = "application/x-www-form-urlencoded";

request.UserAgent = DefaultUserAgent;

//如果需要POST数据

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, parameters[key]);

}

else

{

buffer.AppendFormat("{0}={1}", key, parameters[key]);

}

i++;

}

byte[] data = charset.GetBytes(buffer.ToString());

using (Stream stream = request.GetRequestStream())

{

stream.Write(data, 0, data.Length);

}

}

return request.GetResponse() as HttpWebResponse;

}

static void Main(string[] args)

{

string url = "https://192.168.1.101/httpOrg/create";

Encoding encoding = Encoding.GetEncoding("utf-8");

IDictionary<string, string> parameters = new Dictionary<string, string>();

parameters.Add("authuser", "*****");

parameters.Add("authpass", "*****");

parameters.Add("orgkey","*****");

parameters.Add("orgname", "*****");

HttpWebResponse response = Program.CreatePostHttpResponse(url,parameters,encoding);

//打印返回值

Stream stream = response.GetResponseStream(); //获取响应的字符串流

StreamReader sr = new StreamReader(stream); //创建一个stream读取流

string html = sr.ReadToEnd(); //从头读到尾,放到字符串html

Console.WriteLine(html);

}

}

}

HttpWebRequest默认会用代理进行连接,导致获取结果比较慢。解决办法是,配置:

request.Proxy = null;

不使用代理,即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: