类code如下:
using System;
using System.Collections.Generic;using System.IO;
using System.Net;
using System.Text;
namespace XXX //命名空间请自定义
{
public class NetHelper
{
// Exlog log = new Exlog();
public string DoPost(string url, IDictionary<string, string> parameters, int timeout = 20000) //POST函数
{
try
{
HttpWebRequest request = this.GetWebRequest(url, "POST", timeout);
byte[] buffer = Encoding.UTF8.GetBytes(this.BuildQuery(parameters));
request.ContentLength = buffer.Length;
Stream stream = request.GetRequestStream();
stream.Write(buffer, 0, buffer.Length);
stream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Encoding encoding = this.GetEncoding(response.CharacterSet);
return GetResponseAsString(response, encoding);
}
catch (Exception ex)
{
//log.WriteLog(ex);
}
return string.Empty;
}
public string DoGet(string url, IDictionary<string, string> parameters, int timeout = 20000) //GET函数
{
try
{
if (parameters != null && parameters.Count > 0)
{
if (url.Contains("?"))
{
url = url + "&" + BuildQuery(parameters);
}
else
{
url = url + "?" + BuildQuery(parameters);
}
}
HttpWebRequest request = GetWebRequest(url, "GET", timeout);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Encoding encoding = this.GetEncoding(response.CharacterSet);
return GetResponseAsString(response, encoding);
}
catch (Exception ex)
{
// log.WriteLog(ex);
}
}
private HttpWebRequest GetWebRequest(string url, string method, int timeout = 20000)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = timeout;
request.ServicePoint.Expect100Continue = false;
request.KeepAlive = true;
request.Method = method;
request.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
request.Headers.Add("content", "text/html; charset=utf-8");
//request.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Touch)";
return request;
}
/// <summary>
/// 组装普通文本请求参数。
/// </summary>
/// <param name="parameters">Key-Value形式请求参数字典</param>
/// <returns>URL编码后的请求数据</returns>
private string BuildQuery(IDictionary<string, string> parameters)
{
if (null == parameters)
return "";
StringBuilder data = new StringBuilder();
bool flag = false;
IEnumerator<KeyValuePair<string, string>> temp = parameters.GetEnumerator();
while (temp.MoveNext())
{
string name = temp.Current.Key;
string value = temp.Current.Value;
// 忽略参数名或参数值为空的参数
if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))
{
if (flag)
{
data.Append("&");
}
data.Append(name);
data.Append("=");
data.Append(System.Web.HttpUtility.UrlEncode(value, Encoding.UTF8));
flag = true;
}
}
return data.ToString();
}
private Encoding GetEncoding(string character)
{
if (string.IsNullOrEmpty(character))
return Encoding.UTF8;
return Encoding.GetEncoding(character);
}
/// <summary>
/// 把响应流转换为文本。
/// </summary>
/// <param name="rsp">响应流对象</param>
/// <param name="encoding">编码方式</param>
/// <returns>响应文本</returns>
public string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
{
Stream stream = null;
StreamReader reader = null;
string result = string.Empty;
try
{
// 以字符流的方式读取HTTP响应
stream = rsp.GetResponseStream();
reader = new StreamReader(stream, encoding);
result = reader.ReadToEnd();
}
finally
{
// 释放资源
if (reader != null) reader.Close();
if (stream != null) stream.Close();
if (rsp != null) rsp.Close();
}
return result;
}
}
}
POST调用方法:
NetHelper mypost = new NetHelper();
IDictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("postValue", "Y" + poststr);
string result = mypost.DoPost(server + "/Listener/Handler1.ashx", dic);
//result即服务器的返回值