1.网络请求(同步请求)
//get请求
public static string HttpGet(string Url)
{
LogUtils.Trace("http-get 发送消息 url:{0}", Url);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host + Url);
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
request.Headers["Bundle-Identifier"] = PackageName;
request.Headers["Device-Token"] = DeviceToken;
request.Headers["App-Tag"] = AppTag;
request.Headers["Api-Signature"] = Sha256(string.Format("{0}:{1}", DeviceToken, Signature));
request.UserAgent = null;
request.Timeout = 1000;//连接超时
request.ReadWriteTimeout = 1000;//连接后接受数据超时
HttpWebResponse response;
string retString;
try
{
response = (HttpWebResponse)request.GetResponse();
// 获得Response的流
Stream myResponseStream = response.GetResponseStream();
//读取流数据
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
retString = myStreamReader.ReadToEnd();
LogUtils.Trace("http-get 成功 url:{0} data:{1}", Url, retString);
//读取完成 关闭数据流
myStreamReader.Close();
myResponseStream.Close();
}
catch (WebException ex)
{
LogUtils.Trace("http-get 失败 url:{0} data:{1}", Url, ex.ToString());
retString = "{\"status\":500}";
}
return retString;
}
//post请求
public static string HttpPost(string Url, Dictionary<string, object> param)
{
string Contentjson = JsonConvert.SerializeObject(param);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host + Url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.Headers["Bundle-Identifier"] = PackageName;
request.Headers["Device-Token"] = DeviceToken;
request.Headers["App-Tag"] = AppTag;
request.Headers["Api-Signature"] = Sha256(string.Format("{0}:{1}:{2}", DeviceToken, Signature, Contentjson));
request.Timeout = 1000;//连接超时
request.ReadWriteTimeout = 1000;//连接后接受数据超时
LogUtils.Trace("http-post 发送 url:{0} data:{1}", Url, Contentjson);
Encoding encoding = Encoding.UTF8;
byte[] postData = encoding.GetBytes(Contentjson);
request.ContentLength = postData.Length;
Stream myRequestStream;
try
{
myRequestStream = request.GetRequestStream();
myRequestStream.Write(postData, 0, postData.Length);
myRequestStream.Close();
}
catch (WebException ex)
{
LogUtils.Trace("http-post 失败 url:{0} e:{1}", Url, ex.ToString());
}
HttpWebResponse response;
string retString = "";
try
{
response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, encoding);
retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
LogUtils.Trace("http-post 成功 url:{0} data:{1}", Url, retString);
}
catch (WebException ex)
{
LogUtils.Trace("http-post 失败 url:{0} e:{1}", Url, ex.ToString());
retString = "{\"status\":500}";
}
return retString;
}
2.网络请求(异步请求)
//异步Get
public static async Task<string> GetAsync(string url, double timeout = 1, bool noLog = false)
{
if (!noLog) LogUtils.Trace("http-get-async 发送 url:{0}", url);
HttpClient httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromSeconds(timeout);
httpClient.DefaultRequestHeaders.Add("Bundle-Identifier", PackageName);
httpClient.DefaultRequestHeaders.Add("Device-Token", DeviceToken);
httpClient.DefaultRequestHeaders.Add("App-Tag", AppTag);
httpClient.DefaultRequestHeaders.Add("Api-Signature", Sha256(string.Format("{0}:{1}", DeviceToken, Signature)));
try
{
var response = await httpClient.GetStringAsync(host + url);
if (!noLog) LogUtils.Trace("http-get-async 成功 url:{0} data:{1}", url, response);
return response;
}
catch (Exception e)
{
if (!noLog) LogUtils.Trace("http-get-async 失败 url:{0} e:{1}", url, e.ToString());
return null;
}
}
//异步Post
public static async Task<string> PostAsync(string url, Dictionary<string, object> param, double timeout = 1)
{
string Contentjson = JsonConvert.SerializeObject(param);
HttpClient http = new HttpClient();
http.Timeout = TimeSpan.FromSeconds(timeout);
http.DefaultRequestHeaders.Add("Bundle-Identifier", PackageName);
http.DefaultRequestHeaders.Add("Device-Token", DeviceToken);
http.DefaultRequestHeaders.Add("App-Tag", AppTag);
http.DefaultRequestHeaders.Add("Api-Signature", Sha256(string.Format("{0}:{1}:{2}", DeviceToken, Signature, Contentjson)));
LogUtils.Trace("http-post-async 发送 url:{0} data:{1}", url, Contentjson);
HttpContent httpContent = new StringContent(Contentjson);
try
{
var response = await http.PostAsync(host + url, httpContent);
var content = await response.Content.ReadAsStringAsync();
LogUtils.Trace("http-post-async 成功 url:{0} data:{1}", url, content);
return content;
}
catch (Exception e)
{
LogUtils.Trace("http-post-async 失败 url:{0} e:{1}", url, e.ToString());
return null;
}
}
3——256加密
//256加密
public static string Sha256(string data)
{
byte[] bytes = Encoding.UTF8.GetBytes(data);
byte[] hash = SHA256.Create().ComputeHash(bytes);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
builder.Append(hash[i].ToString("X2"));
}
return builder.ToString();
}
网友评论