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

namespace AGVControl
{
    public class HttpHelper
    {
        //  public static readonly ILog LOGGER = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
        public static string Post(string url, string paramData)
        {
            return Post(url, paramData, Encoding.UTF8);
        }
        //public static bool  PingURLIP(string url, int ms=100)
        //{
        //    string[] urlArray = url.Split('/');
        //    if (urlArray.Length > 3)
        //    {
        //        string ip = urlArray[2];

        //        Ping pingSender = new Ping();
        //        PingReply reply = pingSender.Send(ip, ms);//第一个参数为ip地址,第二个参数为ping的时间 
        //        if (reply.Status == IPStatus.Success)
        //        {
        //            //通
        //            return true;
        //        }
        //        else
        //        {
        //            //不通 
        //            return false;
        //        }
        //    }
        //    return true;
        //}

        /// <summary>
        /// 
        /// </summary>
        /// <param name="url"></param>
        /// <param name="operation"></param>
        /// <param name="simulate">是否模拟服务器返回结果</param>
        /// <returns></returns>
        //public static Operation Post(string url, Operation operation, bool simulate)
        //{
        //    try
        //    {
        //        ////如果Op=0或者Op=5,先拼Ip,不通不发送
        //        //if (operation.op < 0 || operation.op.Equals(5))
        //        //{ 
        //        //    if (PingURLIP(url, 100).Equals(false))
        //        //    {
        //        //        return null;
        //        //    } 
        //        //}

        //        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("模拟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);
        //            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;
        //}
        public static string LastServerMsg = "";
        public static string Post(string url, string paramData, Encoding encoding)
        {
            //if (PingURLIP(url, 100).Equals(false))
            //{
            //    return null;
            //}
            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(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);
                //Common.LogInfo(result);
            }
            catch (Exception e)
            {
                Common.log.Error("POST ERROR:" + e.ToString());
            }
            if (!result.Contains("null") && result.Length != 0)
            {
                //LogUtil.debug(LOGGER,"receive << " + result);
            }
            LastServerMsg = DateTime.Now.ToLongTimeString() + " URL:" + url + "\r\n"
              + "发送:" + paramData + "\r\n"
                 + "接收:" + result + "\r\n"
                ;
            return result;
        }

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

        public static string Get(string url, Encoding encoding)
        {
            try
            {
                Common.log.Debug("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();
                    Common.log.Debug("receive << " + result);
                    return result;
                }
            }
            catch (Exception e)
            {
                Common.log.Error("HTTP GET ERROR:" + e.Message);
            }
            return "";
        }
    }
}