public class PublicHttpUtil
{
//调用:HttpUtilHelper.HttpPost(item.FUrl, body);
/// <summary>
/// 调用WEBAPI方法
/// </summary>
/// <param name="url">地址</param>
/// <param name="body">参数</param>
/// <param name="method">get/post</param>
/// <returns></returns>
public static string HttpCallApi(string url, string body, string method = "POST")
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = method;
request.Accept = "text/html";
request.ContentType = "application/json";
if (method.ToUpper().Equals("POST"))
{
Encoding encoding = Encoding.UTF8;
byte[] buffer = encoding.GetBytes(body);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
catch (WebException ex)
{
return ex.Message;
}
}
public static string HttpPost(string url, string body)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.Accept = "text/html, application/xhtml+xml, */*";
request.ContentType = "application/json";
Encoding encoding = Encoding.UTF8;
byte[] buffer = encoding.GetBytes(body);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
public static string HttpGet(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.Accept = "text/html, application/xhtml+xml, */*";
request.ContentType = "application/json";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
public static string HttpGetUtf8(string Url, string postDataStr)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
//request.CookieContainer = Cookie;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
catch (Exception ex)
{
return ex.Message;
}
}
public static string HttpGetUtf8(string Url)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
//request.CookieContainer = Cookie;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
catch (Exception ex)
{
return ex.Message;
}
}
public static string HttpPostData(string apiUrl, string postString)
{
try
{
byte[] postData = Encoding.UTF8.GetBytes(postString);
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/json");
//webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
webClient.Headers.Add("ContentLength", postData.Length.ToString());
byte[] responseData = webClient.UploadData(apiUrl, "POST", postData); //得到返回字符
StringBuilder resultBuilder = new StringBuilder();
resultBuilder.Append(Encoding.Default.GetString(responseData));
//string resultString = resultBuilder.ToString().Replace('\\', ' ');
string resultString = resultBuilder.ToString();
return resultString;
}
catch (Exception ex)
{
return ex.Message;
}
}
/// <summary>
/// http post 访问网页
/// </summary>
/// <param name="Url"></param>
/// <param name="postDataStr"></param>
/// <returns></returns>
public static string HttpPostString(string Url, string postDataStr)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
//request.ContentLength = Encoding.Unicode.GetByteCount(postDataStr);
request.ContentLength = Encoding.Default.GetByteCount(postDataStr);
//request.CookieContainer = Cookie;
Stream myRequestStream = request.GetRequestStream();
StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.Default);
//StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.Unicode);
myStreamWriter.Write(postDataStr);
myStreamWriter.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//response.Cookies = Cookie.GetCookies(response.ResponseUri);
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.Default);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
catch (Exception ex)
{
return ex.Message;
}
}
#region WebService
public static DataTable ServiceWebClient(string uri, string sql)
{
DataTable repositories = null;
try
{
//var url = "http://127.0.0.1:51013/Service1.asmx/GetData";
var values = new System.Collections.Specialized.NameValueCollection();
values.Add("sql", sql);
var client = new WebClient();
var data = client.UploadValues(uri, "POST", values);
string strJson = System.Text.Encoding.UTF8.GetString(data);
//字符串中间有内容才分解
if (strJson.IndexOf(">[]<") <= 0)
{
string s = strJson.Substring(strJson.IndexOf(">[{") + 1, strJson.IndexOf("}]<") - strJson.IndexOf(">[{") + 1);
repositories = JsonConvert.DeserializeObject<DataTable>(s);
}
}
catch (Exception ex)
{
throw ex;
}
return repositories;
}
#endregion
#region WebAPI
/// <summary>
/// HttpClient Post请求
/// android项目的Properities 下的 AndroidManifest.xml 设置明文流量 :android:usesCleartextTraffic="true"
/// android项目AndroidManifest.xml中的设置:<application android:label="测试应用" android:theme="@style/MainTheme" android:usesCleartextTraffic="true"></application>
/// </summary>
/// <param name="url"></param>
/// <param name="json"> "{id:999,sql:\"select * from tb_student where no='"+ lbl.Text + "'\"}"</param>
/// <returns></returns>
public static string HttpClientPost(string url, string json)
{
string result = string.Empty;
try
{
//设置Http的正文
HttpContent httpContent = new StringContent(json);
//设置Http的内容标头
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
//设置Http的内容标头的字符
httpContent.Headers.ContentType.CharSet = "utf-8";
using (HttpClient httpClient = new HttpClient())
{
//异步Post
HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
//输出Http响应状态码
string statusCode = response.StatusCode.ToString();
//确保Http响应成功
if (response.IsSuccessStatusCode)
{
//异步读取json
result = response.Content.ReadAsStringAsync().Result;
result = ChangeJson(result);
}
}
}
catch (Exception ex)
{
throw ex;
}
return result;
}
/// <summary>
/// 泛型:Post请求
/// where T : class, new() //表示T必须是引用类型(而不是int等值类型,或者ValueType的其他子类),
/// new()表示这个类型T还必须至少具备一个无参的构造函数(还可以有其他有参数的构造函数)
/// where T:class //表示T必须是引用类型
/// where T:new() //表示这个类型T还必须至少具备一个无参的构造函数
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="url"></param>
/// <param name="json"> "{id:999,sql:\"select * from tb_student where no='"+ lbl.Text + "'\"}"</param>
/// <returns></returns>
public static T HttpClientPost<T>(string url, string json) where T : class, new()
{
T result = default(T);
try
{
HttpContent httpContent = new StringContent(json);
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
httpContent.Headers.ContentType.CharSet = "utf-8";
using (HttpClient httpClient = new HttpClient())
{
HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
if (response.IsSuccessStatusCode)
{
Task<string> t = response.Content.ReadAsStringAsync();
string s = t.Result;
//Newtonsoft.Json
//string json = JsonConvert.DeserializeObject(s).ToString();
result = JsonConvert.DeserializeObject<T>(s);
//s = ChangeJson(s);
//result = JsonConvert.DeserializeObject<T>(s);
}
}
}
catch (Exception ex)
{
throw ex;
}
return result;
}
// Get请求
public static string HttpClientGet(string url, out string statusCode)
{
string result = string.Empty;
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = httpClient.GetAsync(url).Result;
statusCode = response.StatusCode.ToString();
if (response.IsSuccessStatusCode)
{
result = response.Content.ReadAsStringAsync().Result;
result = ChangeJson(result);
}
}
return result;
}
// 泛型:Get请求
public static T HttpClientGet<T>(string url, out string statusCode) where T : class, new()
{
T result = default(T);
try
{
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = httpClient.GetAsync(url).Result;
statusCode = response.StatusCode.ToString();
if (response.IsSuccessStatusCode)
{
Task<string> t = response.Content.ReadAsStringAsync();
string s = t.Result;
s = ChangeJson(s);
string json = JsonConvert.DeserializeObject(s).ToString();
result = JsonConvert.DeserializeObject<T>(json);
}
}
}
catch (Exception ex)
{
throw ex;
}
return result;
}
private static string ChangeJson(string result)
{
result = result.Replace("\\", "");
result = result.TrimStart(new char[] { '"' });
result = result.TrimEnd(new char[] { '"' });
return result;
}
#endregion
}
C# 调用 WebApi 、 WebService
最新推荐文章于 2024-09-08 17:23:35 发布