using Microsoft.AspNetCore.Http; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; namespace Hopetry.WebApi.Common { public class HttpClientHelper { /// /// get请求 /// /// /// public static string GetResponse(string url, out string statusCode) { if (url.StartsWith("https")) System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = httpClient.GetAsync(url).Result; statusCode = response.StatusCode.ToString(); if (response.IsSuccessStatusCode) { string result = response.Content.ReadAsStringAsync().Result; return result; } return null; } public static string RestfulGet(string url) { HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; // Get response using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { // Get the response stream StreamReader reader = new StreamReader(response.GetResponseStream()); // Console application output return reader.ReadToEnd(); } } public static T GetResponse(string url) where T : class, new() { if (url.StartsWith("https")) System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = httpClient.GetAsync(url).Result; T result = default(T); if (response.IsSuccessStatusCode) { Task t = response.Content.ReadAsStringAsync(); string s = t.Result; result = JsonConvert.DeserializeObject(s); } return result; } /// /// post请求 /// /// /// post数据 /// public static string PostResponse(string url, string postData, out string statusCode) { if (url.StartsWith("https")) System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; HttpContent httpContent = new StringContent(postData); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); httpContent.Headers.ContentType.CharSet = "utf-8"; HttpClient httpClient = new HttpClient(); //httpClient..setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8"); HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result; statusCode = response.StatusCode.ToString(); if (response.IsSuccessStatusCode) { string result = response.Content.ReadAsStringAsync().Result; return result; } return null; } /// /// 发起post请求 /// /// /// url /// post数据 /// public static T PostResponse(string url, string postData) where T : class, new() { if (url.StartsWith("https")) System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; HttpContent httpContent = new StringContent(postData); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); HttpClient httpClient = new HttpClient(); T result = default(T); HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result; if (response.IsSuccessStatusCode) { Task t = response.Content.ReadAsStringAsync(); string s = t.Result; result = JsonConvert.DeserializeObject(s); } return result; } /// /// 反序列化Xml /// /// /// /// public static T XmlDeserialize(string xmlString) where T : class, new() { try { XmlSerializer ser = new XmlSerializer(typeof(T)); using (StringReader reader = new StringReader(xmlString)) { return (T)ser.Deserialize(reader); } } catch (Exception ex) { throw new Exception("XmlDeserialize发生异常:xmlString:" + xmlString + "异常信息:" + ex.Message); } } /// /// POST请求 /// /// /// /// /// /// /// /// public static string PostResponse(string url, string postData, string token, string appId, string serviceURL, out string statusCode) { if (url.StartsWith("https")) System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; HttpContent httpContent = new StringContent(postData); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); httpContent.Headers.ContentType.CharSet = "utf-8"; httpContent.Headers.Add("token", token); httpContent.Headers.Add("appId", appId); httpContent.Headers.Add("serviceURL", serviceURL); HttpClient httpClient = new HttpClient(); //httpClient..setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8"); HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result; statusCode = response.StatusCode.ToString(); if (response.IsSuccessStatusCode) { string result = response.Content.ReadAsStringAsync().Result; return result; } return null; } /// /// 修改API /// /// /// /// public static string ClientPatchResponse(string url, string postData) { var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.ContentType = "application/x-www-form-urlencoded"; httpWebRequest.Method = "PATCH"; byte[] btBodys = Encoding.UTF8.GetBytes(postData); httpWebRequest.ContentLength = btBodys.Length; httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length); HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); var streamReader = new StreamReader(httpWebResponse.GetResponseStream()); string responseContent = streamReader.ReadToEnd(); httpWebResponse.Close(); streamReader.Close(); httpWebRequest.Abort(); httpWebResponse.Close(); return responseContent; } /// /// 创建API /// /// /// /// public static string ClientPostResponse(string url, string postData) { if (url.StartsWith("https")) ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; HttpContent httpContent = new StringContent(postData); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded") { CharSet = "utf-8" }; var httpClient = new HttpClient(); HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result; if (response.IsSuccessStatusCode) { string result = response.Content.ReadAsStringAsync().Result; return result; } return null; } /// /// 删除API /// /// /// public static bool ClientDeleteResponse(string url) { if (url.StartsWith("https")) ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; var httpClient = new HttpClient(); HttpResponseMessage response = httpClient.DeleteAsync(url).Result; return response.IsSuccessStatusCode; } /// /// 修改或者更改API  /// /// /// /// public static string ClientPutResponse(string url, string postData) { if (url.StartsWith("https")) ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; HttpContent httpContent = new StringContent(postData); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded") { CharSet = "utf-8" }; var httpClient = new HttpClient(); HttpResponseMessage response = httpClient.PutAsync(url, httpContent).Result; if (response.IsSuccessStatusCode) { string result = response.Content.ReadAsStringAsync().Result; return result; } return null; } /// /// 检索API /// /// /// public static string ClientGetResponse(string url) { if (url.StartsWith("https")) ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; var httpClient = new HttpClient(); HttpResponseMessage response = httpClient.GetAsync(url).Result; if (response.IsSuccessStatusCode) { string result = response.Content.ReadAsStringAsync().Result; return result; } return null; } /// /// 上传文件请求 /// /// /// /// public static string ClientUploadResponse(string url, MultipartFormDataContent content, IFormFile file) { using (HttpClient client = new HttpClient()) { //添加字符串参数,参数名为qq //content.Add(new StringContent("123456"), "qq"); string fileName = file.FileName; var byteFile = GetBytesByFormFile(file); //添加文件参数,参数名为files,文件名为123.png content.Add(new ByteArrayContent(byteFile), "file", fileName); var requestUri = url; var result = client.PostAsync(requestUri, content).Result.Content.ReadAsStringAsync().Result; return result; } } /// /// 获取文件字节 /// /// /// public static byte[] GetBytesByFormFile(IFormFile file) { //流 var stream = file.OpenReadStream(); //字节 var bytes = new byte[stream.Length]; //开始读取字节 stream.Read(bytes, 0, bytes.Length); stream.Seek(0, SeekOrigin.Begin); return bytes; } /// /// 保存文件到项目路径 /// /// /// public static bool SaveFile(IFormFileCollection files) { foreach (var file in files) { //文件名 string fileName = file.FileName; //扩展名 var extName = fileName.Substring(fileName.IndexOf(".")); var bytes = GetBytesByFormFile(file); //项目路径 string path = Environment.CurrentDirectory; //路径是否存在 if (!Directory.Exists(path)) { //创建目录 Directory.CreateDirectory(path); } //文件目录 string filePath = path + "\\" + (Guid.NewGuid().ToString() + extName); //文件流 using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { //开始保存文件流 fs.Write(bytes); fs.Close(); } } return true; } #region 下载文件 /// /// 下载图片 /// /// /// /// /// public static bool DownloadPicture(string uri,string reqPath,int timeOut = -1) { //请求路径 string picUrl = uri + reqPath; //根目录 string root = AppDomain.CurrentDomain.BaseDirectory; //保存路径 string savePath = root + reqPath; string directoryPath = savePath.Substring(0, savePath.LastIndexOf("\\") + 1); if (!Directory.Exists(directoryPath)) { Directory.CreateDirectory(directoryPath); } bool value = false; WebResponse response = null; Stream stream = null; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(picUrl); if (timeOut != -1) request.Timeout = timeOut; response = request.GetResponse(); stream = response.GetResponseStream(); if (!response.ContentType.ToLower().StartsWith("text/")) value = SaveBinaryFile(response, savePath); } finally { if (stream != null) stream.Close(); if (response != null) response.Close(); } return value; } private static bool SaveBinaryFile(WebResponse response, string savePath) { bool value = false; byte[] buffer = new byte[1024]; Stream outStream = null; Stream inStream = null; try { if (File.Exists(savePath)) File.Delete(savePath); outStream = System.IO.File.Create(savePath); inStream = response.GetResponseStream(); int l; do { l = inStream.Read(buffer, 0, buffer.Length); if (l > 0) outStream.Write(buffer, 0, l); } while (l > 0); value = true; } finally { if (outStream != null) outStream.Close(); if (inStream != null) inStream.Close(); } return value; } //方法三 根据路径下载图片 public Image GetImage(string url, out string imageStrCookie) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://pic.cnblogs.com/avatar/1465512/20200617142308.png"); request.Method = "GET"; WebResponse response = request.GetResponse(); imageStrCookie = ""; if (response.Headers.HasKeys() && null != response.Headers["Set-Cookie"]) { imageStrCookie = response.Headers.Get("Set-Cookie"); } return Image.FromStream(response.GetResponseStream()); } #endregion } }