using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace Ant.Common
{
public class WebApiHelper
{
///
/// 用户需要登录才能Post请求接口
///
///
///
///
///
///
public static T PostAuthorized(string url, string data, string token)
{
byte[] bytes = Encoding.UTF8.GetBytes(data);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
//写数据
request.Method = "POST";
request.ContentLength = bytes.Length;
request.ContentType = "application/json";
Stream reqstream = request.GetRequestStream();
reqstream.Write(bytes, 0, bytes.Length);
//读数据
request.Timeout = 300000;
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
string strResult = streamReader.ReadToEnd();
//关闭流
reqstream.Close();
streamReader.Close();
streamReceive.Close();
request.Abort();
response.Close();
return JsonConvert.DeserializeObject(strResult);
}
///
/// 不需要授权的接口
///
///
///
///
///
///
public static T Post(string url, string data)
{
byte[] bytes = Encoding.UTF8.GetBytes(data);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
//写数据
request.Method = "POST";
request.ContentLength = bytes.Length;
request.ContentType = "application/json";
Stream reqstream = request.GetRequestStream();
reqstream.Write(bytes, 0, bytes.Length);
//读数据
request.Timeout = 300000;
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
string strResult = streamReader.ReadToEnd();
//关闭流
reqstream.Close();
streamReader.Close();
streamReceive.Close();
request.Abort();
response.Close();
return JsonConvert.DeserializeObject(strResult);
}
///
/// 用户需要登录Get请求
///
///
///
///
///
///
public static T GetMap(string webApi)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi);
request.Method = "GET";
//request.ContentType = "application/json";
request.Timeout = 90000;
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
string strResult = streamReader.ReadToEnd();
streamReader.Close();
streamReceive.Close();
request.Abort();
response.Close();
return JsonConvert.DeserializeObject(strResult);
}
catch (Exception ex)
{
}
return default(T);
}
///
/// 用户需要登录Get请求
///
///
///
///
///
///
public static T Get(string webApi, string query, string queryStr)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi + "?" + queryStr);
request.Method = "GET";
request.ContentType = "application/json";
request.Timeout = 90000;
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
string strResult = streamReader.ReadToEnd();
streamReader.Close();
streamReceive.Close();
request.Abort();
response.Close();
return JsonConvert.DeserializeObject(strResult);
}
///
/// 用户需要登录Get请求
///
///
///
///
///
///
public static DataTable Get(string webApi, string query, string queryStr)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi + "?" + queryStr);
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
request.Timeout = 90000;
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
XmlDocument doc = new XmlDocument();
doc = ReadXmlResponse(request.GetResponse());//读取服务端返回的结果
var dt = ConvertXMLToDataSet(doc.InnerXml);
return dt.Tables[0];
//Stream streamReceive = response.GetResponseStream();
//StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
//string strResult = streamReader.ReadToEnd();
//streamReader.Close();
//streamReceive.Close();
//request.Abort();
//response.Close();
//return strResult;
}
///
/// 用户需要登录Get请求
///
///
///
///
///
///
public static DataTable Get(string webApi, string query, string queryStr, int timeout)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi + "?" + queryStr);
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
request.Timeout = timeout;
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
XmlDocument doc = new XmlDocument();
doc = ReadXmlResponse(request.GetResponse());//读取服务端返回的结果
var dt = ConvertXMLToDataSet(doc.InnerXml);
return dt.Tables[0];
}
///
/// 获取XML转DataTable
///
///
///
private static DataSet ConvertXMLToDataSet(string xmlData)
{
StringReader stream = null;
XmlTextReader reader = null;
try
{
DataSet xmlDS = new DataSet();
stream = new StringReader(xmlData);
reader = new XmlTextReader(stream);
xmlDS.ReadXml(reader);
return xmlDS;
}
catch (Exception ex)
{
string strTest = ex.Message;
return null;
}
finally
{
if (reader != null)
reader.Close();
}
}
///
/// 读取服务端返回的结果
///
private static XmlDocument ReadXmlResponse(WebResponse response)
{
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
String retXml = sr.ReadToEnd();
sr.Close();
XmlDocument doc = new XmlDocument();
doc.LoadXml(retXml);
return doc;
}
///
/// 拼接get参数
///
///
///
public static Tuple GetQueryString(Dictionary parames)
{
// 第一步:把字典按Key的字母顺序排序
IDictionary sortedParams = new SortedDictionary(parames);
IEnumerator> dem = sortedParams.GetEnumerator();
// 第二步:把所有参数名和参数值串在一起
StringBuilder query = new StringBuilder(""); //签名字符串
StringBuilder queryStr = new StringBuilder(""); //url参数
if (parames == null || parames.Count == 0)
return new Tuple("", "");
while (dem.MoveNext())
{
string key = dem.Current.Key;
string value = dem.Current.Value;
if (!string.IsNullOrEmpty(key))
{
query.Append(key).Append(value);
queryStr.Append("&").Append(key).Append("=").Append(value);
}
}
return new Tuple(query.ToString(), queryStr.ToString().Substring(1, queryStr.Length - 1));
}
///
/// 用户需要登录Get请求
///
///
/// API接口
/// 请求接口需要加密的数据
/// 请求接口传递的参数
/// 凭证
/// 是否需要参数签名
///
public static T GetAuthorized(string webApi, string query, string queryStr, string token, bool sign = true)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi + "?" + queryStr);
request.Method = "GET";
request.ContentType = "application/json";
request.Timeout = 90000;
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
string strResult = streamReader.ReadToEnd();
streamReader.Close();
streamReceive.Close();
request.Abort();
response.Close();
return JsonConvert.DeserializeObject(strResult);
}
}
}