using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using Newtonsoft.Json;
using System.Net.Http;
namespace BPASmartClient.Http
{
public class APIHelper
{
private volatile static APIHelper _Instance;
public static APIHelper GetInstance => _Instance ?? (_Instance = new APIHelper());
private APIHelper() { }
///
/// POST 数据请求
///
/// 地址
/// 参数数据
/// 请求头
///
public string PostData(string url, string data, string head)
{
byte[] b = Encoding.UTF8.GetBytes(data);//把字符串转换为二进制
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Proxy = null;
request.ContentType = "application/json";
request.Method = "POST"; //设置请求方法
request.ContentLength = b.Length; //设置长度
request.Headers["Authorize"] = head;
Stream postStream = request.GetRequestStream(); //requst流
postStream.Write(b, 0, b.Length); //写入POST数据,二进制类型的
postStream.Close(); //关闭
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //获取response
Stream stream = response.GetResponseStream(); // 得到response响应流
StreamReader sr = new StreamReader(stream);
string str = sr.ReadToEnd(); //读取流
sr.Close();
stream.Close();
return str;
}
public string GetData(string url, string head)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.Accept = "text/html, application/xhtml+xml, */*";
request.ContentType = "application/json";
request.Headers["Authorize"] = head;
byte[] buffer = Encoding.UTF8.GetBytes(head);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return myStreamReader.ReadToEnd();
}
}
public string HttpRequest(string url, string head, object data, RequestType requestType)
{
if (requestType == RequestType.POST)
{
return PostData(url, JsonConvert.SerializeObject(data), head);
}
else
{
StringBuilder sb = new StringBuilder();
sb.Append("?");
foreach (System.Reflection.PropertyInfo p in data.GetType().GetProperties())
{
if (sb.ToString().Last() != '?')
{
sb.Append("&");
}
sb.Append(p.Name);
sb.Append("=");
sb.Append(p.GetValue(data));
}
return GetData(url + sb.ToString(), head);
}
}
}
public enum RequestType
{
POST,
PUT,
DELETE,
GET
}
}