zoukankan      html  css  js  c++  java
  • C# http 发送接收xml数据

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Web;
    using System.Web.Security;
    using System.Net;
    using System.IO;
    using System.Text.RegularExpressions;
    using System.Security.Cryptography;

    namespace TaoBaoInterface
    {
        public class Service
        {
            public static string TaobaoUrl = "http://110.75.50.103/user/WareHouseReceiveMessage.do";

            /***
            *   测试DSA公钥
            */
           static String strPublicKey = "MIIBtjCCASsGByqGSM44BAEwggEeAoGBAKRQ3ELATnIGJbRJE9+84RER2ULkU7eS"
                            + "zrvX7RF1El0zlv65yI4Qgt9LeU464F6tV42aogHvh5lIe5HoKv0hKM+Am5BgSOSz"
                            + "5f1+SD3NXOaiQfTcSZCOtZhbcZlPDx7OYraISenxHmEAUZoli0n9IscmsCprIJI0"
                            + "/o1A9cnyQWoRAhUApBkCOX0pRTaE6P5s0VjgWW43hnkCgYAOG949Z9DcaRPuyCq0"
                            + "fN7/5IVgIPsqA0vCY0ZWe+PULdfvKg+fLERt2LMYJlksD/KUb4FLgdKtBqI1ggbZ"
                            + "Jdc8lbvgIFzV1XnYkcMJIVobSIAZDVA+2F/uVhj17EiOGWw1Oa+cRP8rDFNkUh2V"
                            + "XNDqncfQr5zA1W/dQg4wu2zb2gOBhAACgYBCvUMmkn8wAliTXcFDn0/ZvO/2J9iO"
                            + "l8FxsyhQu9iiF1OCvmTkT5Rwb3z61hixxi5JO4+aqZszlm8wMkxqOS8IaDYIWQl6"
                            + "/rLV2+9YENEhmIuC3ngce3gZIsayzdxDnzxUqTww8MEV+t3SmWxgLHbTpvXhyFG6"
                            + "DjzLcWRlT6RNtA==";

            /***
               测试DSA私钥
            */
           static String strPrivateKey = "MIIBSgIBADCCASsGByqGSM44BAEwggEeAoGBAKRQ3ELATnIGJbRJE9+84RER2ULk"
                            + "U7eSzrvX7RF1El0zlv65yI4Qgt9LeU464F6tV42aogHvh5lIe5HoKv0hKM+Am5Bg"
                            + "SOSz5f1+SD3NXOaiQfTcSZCOtZhbcZlPDx7OYraISenxHmEAUZoli0n9IscmsCpr"
                            + "IJI0/o1A9cnyQWoRAhUApBkCOX0pRTaE6P5s0VjgWW43hnkCgYAOG949Z9DcaRPu"
                            + "yCq0fN7/5IVgIPsqA0vCY0ZWe+PULdfvKg+fLERt2LMYJlksD/KUb4FLgdKtBqI1"
                            + "ggbZJdc8lbvgIFzV1XnYkcMJIVobSIAZDVA+2F/uVhj17EiOGWw1Oa+cRP8rDFNk"
                            + "Uh2VXNDqncfQr5zA1W/dQg4wu2zb2gQWAhRGDs9OGMdl9f4Sx/fzUSszlYCm1g==";
           
            /// <summary>
            ///
            /// </summary>
            /// <param name="url">请求的url地地址</param>
            /// <param name="xml">请求的xml内容</param>
            /// <returns></returns>
            public static string SendAPI(string url,string xml)
            {
                /***
                *   测试DSA公钥
                */
              
                #region 对xml做DSA密钥签名           
                #endregion           
                string formatString = "logistics_interface={0}&data_digest={1}&type=v1.0";
                string postData = string.Format(formatString, HttpUtility.UrlEncode(xml, Encoding.GetEncoding("GBK")), HttpUtility.UrlEncode(DSAEnCryptoService(xml), Encoding.GetEncoding("GBK")));
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] data = encoding.GetBytes(postData);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "Post";
                request.ContentType = "application/x-www-form-urlencoded; charset=GBK";
                request.ContentLength = data.Length;

                //发送数据
                Stream newStream = request.GetRequestStream();
                newStream.Write(data, 0, data.Length);
                newStream.Close();

                HttpWebResponse responseSorce = (HttpWebResponse)request.GetResponse();

                Stream stream = responseSorce.GetResponseStream();
                StreamReader reader = new StreamReader(stream, Encoding.GetEncoding("GBK"));
                string content = reader.ReadToEnd();
                content = Filert(content);
                stream.Close();
                return content;          
            }

            public static string DecodeReponse(string content)
            {

                int start = content.IndexOf("<?xml");
                int end = content.LastIndexOf("</Response>");
                int length = end - start + "</Response>".Length;
                string res =  content.Substring(start, length);
                return res;
            }

            #region Dirty work
            private static string Filert(string responseHtml)
            {
               
                // ---------------------------------
                // Wait for the closing </html> tag
                // ---------------------------------
                Regex eof = new Regex("</html>", RegexOptions.IgnoreCase);


                string finalHtml = responseHtml.ToString();
                Regex re = null;


                // The title has an id="..." which we need to get rid of
                re = new Regex("<title(http://www.cnblogs.com/shuzhengyi/admin/file://s+id/=.+?)>", RegexOptions.IgnoreCase);
                finalHtml = re.Replace(finalHtml, new MatchEvaluator(TitleMatch));

                // Replace language="javascript" with script type="text/javascript"
                re = new Regex("(?<=script\\s*)(language=\"javascript\")", RegexOptions.IgnoreCase);
                finalHtml = re.Replace(finalHtml, new MatchEvaluator(JavaScriptMatch));

                // If there are still any language="javascript" are left, delete them
                finalHtml = Regex.Replace(finalHtml, "language=\"javascript\"", string.Empty, RegexOptions.IgnoreCase);

                // Clean up images. Some images have a border property which is deprecated in XHTML
                re = new Regex("<img.*(border=\".*?\").*?>", RegexOptions.IgnoreCase);
                finalHtml = re.Replace(finalHtml, new MatchEvaluator(ImageBorderMatch));

                // Wrap the __VIEWSTATE tag in a div to pass validation
                re = new Regex("(<input.*?__VIEWSTATE.*?/>)", RegexOptions.IgnoreCase);
                finalHtml = re.Replace(finalHtml, new MatchEvaluator(ViewStateMatch));

                // If __doPostBack is registered, replace the whole function
                if (finalHtml.IndexOf("__doPostBack") > -1)
                {
                    try
                    {
                        int pos1 = finalHtml.IndexOf("var theform;");
                        int pos2 = finalHtml.IndexOf("theform.__EVENTTARGET", pos1);
                        string methodText = finalHtml.Substring(pos1, pos2 - pos1);
                        string formID = Regex.Match(methodText, "document.forms\\[\"(.*?)\"\\];", RegexOptions.IgnoreCase).Groups[1].Value.Replace(":", "_");

                        finalHtml = finalHtml.Replace(methodText,
                            @"var theform = document.getElementById ('" + formID + "');\r\n\t\t");
                    }
                    catch
                    {
                    }
                }

                // Remove the "name" attribute from <form> tags because they are invalid
                re = new Regex("<form\\s+(name=.*?\\s)", RegexOptions.IgnoreCase);
                finalHtml = re.Replace(finalHtml, new MatchEvaluator(FormNameMatch));
                //return finalHtml;

                // Write the formatted HTML back
                byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(finalHtml);
                return System.Text.Encoding.Default.GetString(data);
            }

            //---------------------------------------------------------------------------
            private static string TitleMatch(Match m)
            {
                return m.ToString().Replace(m.Groups[1].Value, string.Empty);
            }

            //---------------------------------------------------------------------------
            private static string JavaScriptMatch(Match m)
            {
                return m.ToString().Replace(m.Groups[1].Value, "type=\"text/javascript\"");
            }

            //---------------------------------------------------------------------------
            private static string ImageBorderMatch(Match m)
            {
                return m.ToString().Replace(m.Groups[1].Value, string.Empty);
            }

            //---------------------------------------------------------------------------
            private static string ViewStateMatch(Match m)
            {
                return string.Concat("<div>", m.Groups[1].Value, "</div>");
            }

            //---------------------------------------------------------------------------
            private static string FormNameMatch(Match m)
            {
                return m.ToString().Replace(m.Groups[1].Value, string.Empty);
            }
            #endregion

            /// <summary>
            /// 用私钥加密数据
            /// </summary>
            /// <param name="str"></param>
            /// <returns>返回的是签名数据</returns>
            public static string DSAEnCryptoService(string str)
            {
                DSACryptoServiceProvider dsac = new DSACryptoServiceProvider();
                byte[] privateBytes = null;
                byte[] bytes = Encoding.Default.GetBytes(str); //xml数据

                privateBytes = Convert.FromBase64String(strPrivateKey);

                AsnKeyParser keyParser = new AsnKeyParser(privateBytes);

                dsac.ImportParameters(keyParser.ParseDSAPrivateKey());

                byte[] sign = dsac.SignData(bytes);

                string yy = "";
                foreach (byte bt in sign)
                {

                    yy += bt.ToString() + ", ";
                }
                string dd = yy;

                string strsign = Convert.ToBase64String(sign);
                return strsign;

            }


            /// <summary>
            /// 用公钥解密数据
            /// </summary>
            /// <param name="str"></param>
            /// <returns>返回的是签名数据</returns>
            public static bool DSACryptoService(string str, string signstr)
            {
                try
                {
                    byte[] bytes = Encoding.Default.GetBytes(str); //xml数据(URL解码以后的)
                    byte[] signbytes = Convert.FromBase64String(signstr);  //签名后的数据
                    DSACryptoServiceProvider dsac2 = new DSACryptoServiceProvider();
                    byte[] publicBytes = null;
                    publicBytes = Convert.FromBase64String(strPublicKey);
                    AsnKeyParser keyParser1 = new AsnKeyParser(publicBytes);
                    dsac2.ImportParameters(keyParser1.ParseDSAPublicKey());
                    bool ver = dsac2.VerifyData(bytes, signbytes);
                    if (ver)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (Exception e)
                {
                    string strlog = str + "| " + signstr + "| " + e.ToString();
                    return false;
                }
            }
        }
    }

  • 相关阅读:
    DHCP服务的配置(linux)
    LVM逻辑卷
    python的元素列表
    DOS和DDOS你知道多少?
    DOS与DDOS攻击的原理与防范之法
    常见HTTP状态代码,http报错代码翻译
    TCP和UDP优缺点
    DLL何时需共享内存管理器
    Delphi 指针大全
    Delphi编写DLL(以及静态和动态方式调用)
  • 原文地址:https://www.cnblogs.com/shuzhengyi/p/1934911.html
Copyright © 2011-2022 走看看