/// <summary>
/// get方式请求url
/// </summary>
/// <param name="serviceAddress">请求地址</param>
/// <returns></returns>
public string GetFunction(string serviceAddress)
{
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(serviceAddress);
request.Method = "GET";
//request.ContentType = "text/html;charset=UTF-8";
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
System.IO.Stream myResponseStream = response.GetResponseStream();
System.IO.StreamReader myStreamReader = new System.IO.StreamReader(myResponseStream, System.Text.Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
/// <summary>
/// 从url下载数据
/// </summary>
/// <param name="Url"></param>
/// <param name="FileName"></param>
public static void DownLoad(string Url, string FileName)
{
bool Value = false;
System.Net.WebResponse response = null;
Stream stream = null;
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(Url);
response = request.GetResponse();
stream = response.GetResponseStream();
if (!response.ContentType.ToLower().StartsWith("text/"))
{
Value = SaveBinaryFile(response, FileName);
}
}
/// <summary>
/// post
/// </summary>
/// <param name="url"></param>
/// <param name="parms"></param>
/// <param name="encoding"></param>
/// <param name="contentType"></param>
/// <param name="timeOut"></param>
/// <returns></returns>
public static string PostResponse(string url, string parms, string encoding, string contentType = "text/xml", int timeOut = 60000)
{
var result = string.Empty;
try
{
var mRequest = (HttpWebRequest)WebRequest.Create(url);
//相应请求的参数
var data = Encoding.GetEncoding(encoding).GetBytes(parms);
mRequest.Method = "Post";
mRequest.ContentType = contentType;
mRequest.ContentLength = data.Length;
mRequest.Timeout = timeOut;
mRequest.KeepAlive = true;
mRequest.ProtocolVersion = HttpVersion.Version10;
//请求流
var requestStream = mRequest.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
//响应流
var mResponse = mRequest.GetResponse() as HttpWebResponse;
var responseStream = mResponse.GetResponseStream();
if (responseStream != null)
{
var streamReader = new StreamReader(responseStream, Encoding.GetEncoding(encoding));
//获取返回的信息
result = streamReader.ReadToEnd();
streamReader.Close();
responseStream.Close();
}
}
catch (Exception ex)
{
result = "获取数据失败,请重试!" + url + ex.ToString();
}
return result;
}
/// <summary>
/// 将二进制文件保存到磁盘
/// </summary>
/// <param name="response">文件</param>
/// <param name="FileName">地址</param>
/// <returns></returns>
private static bool SaveBinaryFile(System.Net.WebResponse response, string FileName)
{
bool Value = true;
byte[] buffer = new byte[1024];
try
{
if (File.Exists(FileName))
File.Delete(FileName);
Stream outStream = System.IO.File.Create(FileName);
Stream inStream = response.GetResponseStream();
int l;
do
{
l = inStream.Read(buffer, 0, buffer.Length);
if (l > 0)
outStream.Write(buffer, 0, l);
}
while (l > 0);
outStream.Close();
inStream.Close();
}
catch
{
Value = false;
}
return Value;
}
/// <summary>
/// HmacSHA256加密后Base64
/// </summary>
/// <param name="message">待加密字符</param>
/// <param name="secret">秘钥</param>
/// <returns>加密后签名</returns>
private static string HmacSHA256(string message, string secret)
{
secret = secret ?? "";
var encoding = new System.Text.UTF8Encoding();
byte[] keyByte = encoding.GetBytes(secret);
byte[] messageBytes = encoding.GetBytes(message);
using (var hmacsha256 = new System.Security.Cryptography.HMACSHA256(keyByte))
{
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
return Convert.ToBase64String(hashmessage);
}
}
/// <summary>
/// 将参数按ASCII顺序编码 同时给key和value进行UrlEncode
/// </summary>
/// <param name="paramsMap"></param>
/// <returns></returns>
public static String getParamSrc(Dictionary<string, string> paramsMap)
{
var vDic = (from objDic in paramsMap orderby objDic.Key ascending select objDic);
System.Text.StringBuilder str = new System.Text.StringBuilder();
foreach (KeyValuePair<string, string> kv in vDic)
{
string pkey = System.Web.HttpUtility.UrlEncode(kv.Key);
string pvalue = System.Web.HttpUtility.UrlEncode(kv.Value);
str.Append(pkey + "=" + pvalue + "&");
}
String result = str.ToString().Substring(0, str.ToString().Length - 1);
return result;
}
/// <summary>
/// API发送DELETE请求,返回状态:200成功,201失败
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static int ApiDelete(string url)
{
System.Net.HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
req.Method = "DELETE";
req.ServicePoint.Expect100Continue = false;
req.ServicePoint.UseNagleAlgorithm = false;
req.Timeout = 60000;
req.ContentType = "application/json";
string response = string.Empty;
using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
//using (System.IO.StreamReader reader = new System.IO.StreamReader(
// res.GetResponseStream()
// , Encoding.UTF8))
//{
// response = reader.ReadToEnd();
//}
return (int)res.StatusCode;
}
}
/// <summary>
/// 转换时间为时间戳(毫秒)
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public static long TimeStampMilliseconds(DateTime dateTime)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
return (long)(dateTime - dtStart).TotalMilliseconds;
}
/// <summary>
/// 加密标识
/// </summary>
/// <param name="prepareSign"></param>
/// <param name="paras"></param>
/// <param name="requestEntity"></param>
/// <returns></returns>
private static string GetSign(string prepareSign, string paras, string requestEntity = "")
{
prepareSign += paras;
if (!string.IsNullOrWhiteSpace(requestEntity))
{
prepareSign += "\n" + requestEntity;
}
else
{
prepareSign += "\n47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=";
}
prepareSign = HmacSHA256(prepareSign, token);
return System.Web.HttpUtility.UrlEncode(prepareSign);
}
/// <summary>
/// 请求体加密
/// </summary>
/// <param name="requestJsonEntity"></param>
/// <returns></returns>
private static string GetEntitySign(string requestJsonEntity)
{
byte[] jsonEntity = Encoding.UTF8.GetBytes(requestJsonEntity.Trim());
string result = "";
if (jsonEntity == null || jsonEntity.Length == 0)
{
result = sha256("");
}
else
{
byte[] data = null;
if (jsonEntity.Length <= 100)
{
data = jsonEntity;
}
else
{
data = jsonEntity.Take(100).ToArray();
}
string temp = Encoding.UTF8.GetString(data);
result = sha256(temp);
}
return result;
}