Files
lserp_cs_6.0/插件库/Lskj.Push/Common/BaseHttpClient.cs
T
cyf ab56a9bcf7 基线 SVN r240
SVN-Revision: r240
2025-02-06 06:46:06 +00:00

145 lines
6.0 KiB
C#

using Lskj.Push.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Diagnostics;
using Newtonsoft.Json;
using Lskj.Push.Common.Resp;
namespace Lskj.Push.Common
{
class BaseHttpClient
{
private const String CHARSET = "UTF-8";
private const String RATE_LIMIT_QUOTA = "X-Rate-Limit-Limit";
private const String RATE_LIMIT_Remaining = "X-Rate-Limit-Remaining";
private const String RATE_LIMIT_Reset = "X-Rate-Limit-Reset";
protected const int RESPONSE_OK = 200;
//设置连接超时时间
private const int DEFAULT_CONNECTION_TIMEOUT = (20 * 1000); // milliseconds
//设置读取超时时间
private const int DEFAULT_SOCKET_TIMEOUT = (30 * 1000); // milliseconds
public ResponseWrapper sendPost(String url, String auth, String reqParams)
{
return this.sendRequest( "POST", url, auth, reqParams);
}
public ResponseWrapper sendDelete(String url, String auth, String reqParams)
{
return this.sendRequest("DELETE", url, auth, reqParams);
}
public ResponseWrapper sendGet(String url, String auth, String reqParams)
{
return this.sendRequest("GET", url, auth, reqParams);
}
/**
*
* method "POST" or "GET"
* url
* auth 可选
*/
public ResponseWrapper sendRequest(String method, String url, String auth,String reqParams)
{
Console.WriteLine("Send request - " + method.ToString() + " " + url + " "+ DateTime.Now);
if (null != reqParams)
{
Console.WriteLine("Request Content - " + reqParams +" "+ DateTime.Now);
}
ResponseWrapper result = new ResponseWrapper();
HttpWebRequest myReq = null;
HttpWebResponse response = null;
try
{
myReq = (HttpWebRequest)WebRequest.Create(url);
myReq.Method = method;
myReq.ContentType = "application/json";
if ( !String.IsNullOrEmpty(auth) )
{
myReq.Headers.Add("Authorization", "Basic " + auth);
}
if (method == "POST")
{
byte[] bs = UTF8Encoding.UTF8.GetBytes(reqParams);
myReq.ContentLength = bs.Length;
using (Stream reqStream = myReq.GetRequestStream())
{
reqStream.Write(bs, 0, bs.Length);
reqStream.Close();
}
}
response = (HttpWebResponse)myReq.GetResponse();
HttpStatusCode statusCode = response.StatusCode;
result.responseCode = statusCode;
if (Equals(response.StatusCode, HttpStatusCode.OK))
{
using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8))
{
result.responseContent = reader.ReadToEnd();
}
String limitQuota = response.GetResponseHeader(RATE_LIMIT_QUOTA);
String limitRemaining = response.GetResponseHeader(RATE_LIMIT_Remaining);
String limitReset = response.GetResponseHeader(RATE_LIMIT_Reset);
result.setRateLimit(limitQuota, limitRemaining, limitReset);
Console.WriteLine("Succeed to get response - 200 OK" +" "+ DateTime.Now);
Console.WriteLine("Response Content - {0}", result.responseContent +" "+ DateTime.Now);
}
}
catch (WebException e)
{
if (e.Status == WebExceptionStatus.ProtocolError)
{
HttpStatusCode errorCode = ((HttpWebResponse)e.Response).StatusCode;
string statusDescription = ((HttpWebResponse)e.Response).StatusDescription;
using (StreamReader sr = new StreamReader(((HttpWebResponse)e.Response).GetResponseStream(), System.Text.Encoding.UTF8))
{
result.responseContent = sr.ReadToEnd();
}
result.responseCode = errorCode;
result.exceptionString = e.Message;
String limitQuota = ((HttpWebResponse)e.Response).GetResponseHeader(RATE_LIMIT_QUOTA);
String limitRemaining = ((HttpWebResponse)e.Response).GetResponseHeader(RATE_LIMIT_Remaining);
String limitReset = ((HttpWebResponse)e.Response).GetResponseHeader(RATE_LIMIT_Reset);
result.setRateLimit(limitQuota, limitRemaining, limitReset);
Debug.Print(e.Message);
result.setErrorObject();
Console.WriteLine(string.Format("fail to get response - {0}", errorCode) + " "+ DateTime.Now);
Console.WriteLine(string.Format("Response Content - {0}", result.responseContent) + " "+ DateTime.Now);
throw new APIRequestException(result);
}
else
{//
throw new APIConnectionException(e.Message);
}
}
//这里不再抓取非http的异常,如果异常抛出交给开发者自行处理
//catch (System.Exception ex)
//{
// String errorMsg = ex.Message;
// Debug.Print(errorMsg);
//}
finally
{
if (response != null)
{
response.Close();
}
if(myReq != null)
{
myReq.Abort();
}
}
return result;
}
}
}