HttpHelper.cs 5.3 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;
using System.Net.NetworkInformation;

namespace OnlineStore.Common
{
    public class HttpHelper
    {
       public static readonly ILog LOGGER = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

        public static Operation Post(string url, Operation operation,out  bool isTimeOut)
        {
            isTimeOut = false;
            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 = "";
                try
                {
                    json = JsonHelper.SerializeObject(operation);
                }
                catch (Exception ex)
                {
                    LogUtil.error("JsonHelper.SerializeObject(operation) 出错【operation.op=" + operation.op + "】" + ex);
                }

                string result = Post(url, json, Encoding.UTF8, out isTimeOut);
                if (!string.IsNullOrEmpty(result))
                {
                    try
                    {
                        return JsonHelper.DeserializeJsonToObject<Operation>(result);
                    }
                    catch (Exception ex)
                    {
                        LogUtil.error("JsonHelper.DeserializeJsonToObject 出错【result=" + result + "】" + ex);
                    }
                }
                //}
            }
            catch (Exception ex)
            {
                LogUtil.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, out bool IsTimeOut)
        {
            IsTimeOut = false;
            if (isLog == 1)
            {
                LOGGER.Info("给服务器发送数据【" + paramData + "】 ");
            }
            if (paramData != "null" && paramData != null)
            {
                //   LogUtil.debug(LOGGER,  "HTTP POST to " + url + " \n\t >> " + 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(3000);
                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);
                //LogUtil.info(result);
            }
            catch (WebException ex)
            {
                IsTimeOut = true;
                LogUtil.error(LOGGER, "POST WebException :" + ex.ToString(), 101);
            }
            catch (Exception e)
            {
                LogUtil.error(LOGGER, "POST ERROR:" + e.ToString(), 1);
            }
            if (!result.Contains("null") && result.Length != 0)
            {
                //LogUtil.debug(LOGGER,"receive << " + result);
            }
            if (isLog == 1)
            {
                LogUtil.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 "";
        //}
    }
}