/// <summary>
/// HTTP Post请求
/// </summary>
/// <param name="uri">HTTP接口Url,不带协议和端口,如/artemis/api/resource/v1/org/advance/orgList</param>
/// <param name="body">请求参数</param>
/// <param name="timeout">请求超时时间,单位:秒</param>
/// <return>请求结果</return>
public static byte[] HttpPost(bool _isHttps, string _ip, string _port, string uri, string body, int timeout)
{
Dictionary<string, string> header = new Dictionary<string, string>();
// 初始化请求:组装请求头,设置远程证书自动验证通过
//initRequest(header, uri, body, true);
// build web request object
StringBuilder sb = new StringBuilder();
sb.Append(_isHttps ? "https://" : "http://").Append(_ip).Append(":").Append(_port.ToString()).Append(uri);
// 创建POST请求
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(sb.ToString());
req.KeepAlive = false;
req.ProtocolVersion = HttpVersion.Version11;
req.AllowAutoRedirect = false; // 不允许自动重定向
req.Method = "POST";
req.Timeout = timeout * 1000; // 传入是秒,需要转换成毫秒
req.ContentType = "application/json";
//req.Accept = header["Accept"];
//req.ContentType = header["Content-Type"];
//foreach (string headerKey in header.Keys)
//{
// if (headerKey.Contains("x-ca-"))
// {
// req.Headers.Add(headerKey + ":" + header[headerKey]);
// }
//}
if (!string.IsNullOrWhiteSpace(body))
{
byte[] postBytes = Encoding.UTF8.GetBytes(body);
req.ContentLength = postBytes.Length;
Stream reqStream = null;
try
{
reqStream = req.GetRequestStream();
reqStream.Write(postBytes, 0, postBytes.Length);
reqStream.Close();
}
catch (WebException e)
{
if (reqStream != null)
{
reqStream.Close();
}
return null;
}
}
HttpWebResponse rsp = null;
try
{
rsp = (HttpWebResponse)req.GetResponse();
if (HttpStatusCode.OK == rsp.StatusCode)
{
Stream rspStream = rsp.GetResponseStream();
StreamReader sr = new StreamReader(rspStream);
string strStream = sr.ReadToEnd();
long streamLength = strStream.Length;
byte[] response = System.Text.Encoding.UTF8.GetBytes(strStream);
rsp.Close();
return response;
}
else if (HttpStatusCode.Found == rsp.StatusCode || HttpStatusCode.Moved == rsp.StatusCode) // 302/301 redirect
{
try
{
string reqUrl = rsp.Headers["Location"].ToString(); // 如需要重定向URL,请自行修改接口返回此参数
rsp.Close();
WebRequest wreq = WebRequest.Create(reqUrl);
rsp = (HttpWebResponse)wreq.GetResponse();
Stream rspStream = rsp.GetResponseStream();
long streamLength = rsp.ContentLength;
int offset = 0;
byte[] response = new byte[streamLength];
while (streamLength > 0)
{
int n = rspStream.Read(response, offset, (int)streamLength);
if (0 == n)
{
break;
}
offset += n;
streamLength -= n;
}
return response;
}
catch (Exception e)
{
rsp.Close();
return null;
}
}
rsp.Close();
}
catch (WebException e)
{
if (rsp != null)
{
rsp.Close();
}
}
return null;
}
//接口需要的参数–SessionID,loginID,eSystemCode
public string GetModelCurTime(string sessionID,string loginID,string eSystemCode)
{
string result = "";
TData<byte[]> tj = new TData<byte[]>();
ApiModel reques = new ApiModel();
reques.sessionID = sessionID;
reques.loginID = loginID;
reques.eSystemCode = eSystemCode;
string uri = "/checkMenuRight";//访问的接口名称
byte[] response = HttpPost(false, "内网ip地址", "端口号", uri, JsonConvert.SerializeObject(reques), 30);
if (null == response)
{
//console.writeline(uri + " : post fail");
}
else
{
string responseStr = System.Text.Encoding.UTF8.GetString(response);
//hkresponsepage<regiondto> hkresponsepage = jsonconvert.deserializeobject<hkresponsepage<regiondto>>(responsestr);
JObject jo = (JObject)JsonConvert.DeserializeObject(responseStr);
//var date = jsonconvert.deserializeobject<waterqaulity_user>(jsonconvert.serializeobject(jo["retcontent"]));
// ["$userid"].tostring();
// tj.data = response;
result = jo["body"]["retContent"]["username"].ToString();
//dt = gettimespan(convert.toint64(date));
//result = responsestr;
}
return result;
}