491 lines
17 KiB
C#
491 lines
17 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// get请求
|
||
/// </summary>
|
||
/// <param name="url"></param>
|
||
/// <returns></returns>
|
||
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<T>(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<string> t = response.Content.ReadAsStringAsync();
|
||
string s = t.Result;
|
||
|
||
result = JsonConvert.DeserializeObject<T>(s);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/// <summary>
|
||
/// post请求
|
||
/// </summary>
|
||
/// <param name="url"></param>
|
||
/// <param name="postData">post数据</param>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 发起post请求
|
||
/// </summary>
|
||
/// <typeparam name="T"></typeparam>
|
||
/// <param name="url">url</param>
|
||
/// <param name="postData">post数据</param>
|
||
/// <returns></returns>
|
||
public static T PostResponse<T>(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<string> t = response.Content.ReadAsStringAsync();
|
||
string s = t.Result;
|
||
|
||
result = JsonConvert.DeserializeObject<T>(s);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 反序列化Xml
|
||
/// </summary>
|
||
/// <typeparam name="T"></typeparam>
|
||
/// <param name="xmlString"></param>
|
||
/// <returns></returns>
|
||
public static T XmlDeserialize<T>(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);
|
||
}
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// POST请求
|
||
/// </summary>
|
||
/// <param name="url"></param>
|
||
/// <param name="postData"></param>
|
||
/// <param name="token"></param>
|
||
/// <param name="appId"></param>
|
||
/// <param name="serviceURL"></param>
|
||
/// <param name="statusCode"></param>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 修改API
|
||
/// </summary>
|
||
/// <param name="url"></param>
|
||
/// <param name="postData"></param>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 创建API
|
||
/// </summary>
|
||
/// <param name="url"></param>
|
||
/// <param name="postData"></param>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除API
|
||
/// </summary>
|
||
/// <param name="url"></param>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 修改或者更改API
|
||
/// </summary>
|
||
/// <param name="url"></param>
|
||
/// <param name="postData"></param>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 检索API
|
||
/// </summary>
|
||
/// <param name="url"></param>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 上传文件请求
|
||
/// </summary>
|
||
/// <param name="url"></param>
|
||
/// <param name="file"></param>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取文件字节
|
||
/// </summary>
|
||
/// <param name="file"></param>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 保存文件到项目路径
|
||
/// </summary>
|
||
/// <param name="file"></param>
|
||
/// <returns></returns>
|
||
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 下载文件
|
||
|
||
/// <summary>
|
||
/// 下载图片
|
||
/// </summary>
|
||
/// <param name="uri"></param>
|
||
/// <param name="reqPath"></param>
|
||
/// <param name="timeOut"></param>
|
||
/// <returns></returns>
|
||
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
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
}
|
||
}
|