HttpHelper.cs 6.6 KB
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Collections;
using System.Net;
using System.Net.Security;
using System.Security;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Reflection;
using log4net;

namespace OnlineStore.Common
{
    public class HttpHelper
    {
        public static readonly ILog LOGGER = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
       
  
        public static Operation Post(string url, Operation operation, bool simulate)
        {
            try
            {
                if (simulate)
                {//模拟服务器返回
                    operation.status = 200;
                    operation.data.Clear();
                    operation.data.Add("posId", "A001");
                    string pos = "D100-111#D102-222#D104-333";
                    operation.data.Add("pos", pos);
                    if (operation.op == 1 || operation.op == 2)
                    {//入库或出库

                        string json = JsonHelper.SerializeObject(operation);
                        LogUtil.error(LOGGER, "模拟HTTP服务器返回出库入库信息:" + json);
                        return operation;
                    }
                }
                else
                {
                    string json = JsonHelper.SerializeObject(operation); 
                    string result = Post(url, json);
                    Operation op =  JsonHelper.DeserializeJsonToObject<Operation>(result);
                   
                    if (operation.op > 0 || (op != null && op.op > 0) || (isLog == 1))
                    {
                        LogUtil.info("Send [" + json + "]  Revice [" + result + "]");
                    }
                    return op;
                }
            }
            catch (Exception ex)
            {
                LOGGER.Error("Post 出错【operation.op=" + operation.op + "】:" + ex);
            }
            return null;
        }
        private static int isLog = ConfigAppSettings.GetIntValue(Setting_Init.Server_Log_Open); 
        public static string Post(string url, string paramData )
        { 
            Encoding encoding = Encoding.UTF8; 
            //if (isLog == 1)
            //{
            //    LOGGER.Info("给服务器发送数据【" + paramData + "】 ");
            //}
          
            string result = "";

            if (url.ToLower().IndexOf("https", System.StringComparison.Ordinal) > -1)
            {
                ServicePointManager.ServerCertificateValidationCallback =
                               new RemoteCertificateValidationCallback((sender, certificate, chain, errors) => { return true; });
            }

            try
            {
                var wc = new MyWebClient(5000);
                if (string.IsNullOrEmpty(wc.Headers["Content-Type"]))
                    wc.Headers.Add("Content-Type", "application/json;charset=UTF-8");
                wc.Encoding = encoding;

                result = wc.UploadString(url, "POST", paramData); 
            }
            catch (Exception e)
            {
                LogUtil.error(LOGGER, "POST ERROR:" + e.ToString(), 1);
            }
           
            //if (isLog == 1)
            //{
            //    LOGGER.Info("收到服务器数据【" + result + "】");
            //}
            return result;
        }

        public static string Get(string url)
        {
            return Get(url, Encoding.UTF8);
        }

        public static string Get(string url, Encoding encoding)
        {
            try
            {
                LogUtil.info(LOGGER, "HTTP GET FROM: " + url);
                var wc = new WebClient { Encoding = encoding };
                var readStream = wc.OpenRead(url);
                using (var sr = new StreamReader(readStream, encoding))
                {
                    var result = sr.ReadToEnd();
                    LogUtil.info(LOGGER, "receive << " + result);
                    return result;
                }
            }
            catch (Exception e)
            {
                LogUtil.error(LOGGER, "HTTP GET ERROR:" + e.Message, 2);
            }
            return "";
        }

        private static string Addr_cancelPutInTask = "/service/store/cancelPutInTask";
        public static string cancelPutInTask(string deviceName, string barcode)
        {
            string msg = "";
            try
            {

                Dictionary<string, string> paramMap = new Dictionary<string, string>();
                paramMap.Add("barcode", barcode);

                string server = GetAddr(Addr_cancelPutInTask, paramMap);
                DateTime startTime = DateTime.Now;
                string resultStr = HttpHelper.Post(server, "");
                LogUtil.info(deviceName + "cancelPutInTask    " + FormUtil.GetSpanStr(DateTime.Now - startTime) + "  【" + server + "】【" + resultStr + "】");

                RfidData data = JsonHelper.DeserializeJsonToObject<RfidData>(resultStr);

                if (data == null)
                {
                    return msg = deviceName + " cancelPutInTask【 " + barcode + "】 没有收到服务器反馈";
                }
                else if (data.code.Equals(0).Equals(false))
                {
                    return msg = deviceName + " cancelPutInTask【 " + barcode + "】   :" + data.msg;
                }

                return "";
            }
            catch (Exception ex)
            {
                LogUtil.error(deviceName + " " + ex.ToString());
            }
            return msg;
        }
        private static string GetAddr(string addr, Dictionary<string, string> paramsMap)
        {
            string server = ConfigAppSettings.GetValue(Setting_Init.http_server);
            if (server.EndsWith("/"))
            {
                server = server.Substring(0, server.Length - 1);
            }
            string path = server + addr.Trim() + "?";
            foreach (string paramName in paramsMap.Keys)
            {
                string par = System.Web.HttpUtility.UrlEncode(paramsMap[paramName], System.Text.Encoding.UTF8);
                path += paramName + "=" + par + "&";
            }
            path = path.Substring(0, path.Length - 1);
            return path;
        }
        public class RfidData
        {
            //{"code":0,"msg":"ok","data":"7"} 
            public int code { get; set; }

            public string msg { get; set; }

            public Dictionary<string, string> data { get; set; }
        }
    }
}