Example #1
0
        static byte[] InternalSslSocketHttp(IPEndPoint endpoint, HttpArgs args, HttpMethod method, X509CertificateCollection certificates)
        {
            using (Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
            {
                try
                {
                    client.Connect(endpoint);
                    if (client.Connected)
                    {
                        using (SslStream stream = new SslStream(new NetworkStream(client), false, ValidateServerCertificate, null))
                        {
                            stream.AuthenticateAsClient("ServerName", certificates, SslProtocols.Tls, false);
                            if (stream.IsAuthenticated)
                            {
                                //生成协议包
                                byte[] buff = HttpClient.ParseHttpArgs(method, args);
                                stream.Write(buff, 0, buff.Length);
                                stream.Flush();
                                return ParseSslResponse(endpoint, stream, args, certificates);

                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            return null;
        }
Example #2
0
 /// <summary>
 /// 解析 Ssl Response
 /// </summary>
 /// <param name="endpoint"></param>
 /// <param name="ssl"></param>
 /// <param name="args"></param>
 /// <param name="certificates"></param>
 /// <returns></returns>
 private static byte[] ParseSslResponse(IPEndPoint endpoint, SslStream ssl, HttpArgs args, X509CertificateCollection certificates)
 {
     //尝试4秒时间读取协议头
     CancellationTokenSource source = new CancellationTokenSource();
     Task<string> myTask = Task.Factory.StartNew<string>(HttpClient.ReadHeaderProcess, ssl, source.Token);
     if (myTask.Wait(4000))
     {
         string header = myTask.Result;
         if (header.StartsWith("HTTP/1.1 302"))
         {
             int start = header.IndexOf("LOCATION", StringComparison.OrdinalIgnoreCase);
             if (start > 0)
             {
                 string temp = header.Substring(start, header.Length - start);
                 string[] sArry = Regex.Split(temp, "\r\n");
                 args.Url = sArry[0].Remove(0, 10);
                 //注意:302协议需要重定向
                 return Get(endpoint, args, certificates);
             }
         }
         //继续读取内容
         else if (header.StartsWith("HTTP/1.1 200"))
         {
             int start = header.IndexOf("CONTENT-LENGTH", StringComparison.OrdinalIgnoreCase);
             if (start > 0)
             {
                 string temp = header.Substring(start, header.Length - start);
                 string[] sArry = temp.Split(new char[] { '\r', '\n', ' ', ':' }, StringSplitOptions.RemoveEmptyEntries);
                 int content_length;
                 if (sArry.Length > 1 && Int32.TryParse(sArry[1], out content_length))
                 {
                     byte[] bytes = new byte[content_length];
                     if (ssl.Read(bytes, 0, content_length) > 0)
                     {
                         return bytes;
                     }
                 }
             }
             else
             {
                 //不存在Content-Length协议头
                 return HttpClient.ParseResponse(ssl);
             }
         }
         else
         {
             return Encoding.UTF8.GetBytes(header);
         }
     }
     else
     {
         //超时的话,别忘记取消任务哦
         source.Cancel();
     }
     return null;
 }
Example #3
0
        private void NewOrder(UserNote note)
        {
            UserSession user = note.Session;
            Variant v = note.GetVariant(0);

            string vs = JsonConvert.SerializeObject(v);
            //LogWrapper.Warn("请求:" + vs);

            BuyGoodsRequest request = new BuyGoodsRequest();

            string meta = v.GetStringOrDefault("goodsmeta");
            request.goodsmeta = Convert.ToBase64String(Encoding.UTF8.GetBytes(meta));
            request.goodsurl = v.GetStringOrDefault("goodsurl");
            request.openid = user.UserID.PadLeft(32, '0');
            request.openkey = user.key;
            request.payitem = v.GetStringOrDefault("payitem");
            request.pf = v.GetStringOrDefault("platform") ?? v.GetStringOrDefault("pf");
            request.pfkey = v.GetStringOrDefault("pfkey");
            request.appmode = v.GetIntOrDefault("appmode", 2);
            request.device = v.GetIntOrDefault("device");
            request.zoneid = ServerLogger.zoneid;

            string host = ServerManager.BuyHost;
            string uri = ServerManager.BuyUri;

            StringBuilder sb = new StringBuilder(512);
            string quest = request.Build(sb, null).ToString();
            string sign = AppSign.Sign(uri, quest);

            sb.Clear();
            sb.Append(uri + "?");
            request.Build(sb, UrlUtility.UrlEncode);
            sb.Append("&sig=");
            sb.Append(sign);

            HttpArgs a = new HttpArgs();
            a.Host = host;
            a.Url = sb.ToString();

            //LogWrapper.Warn("请求Url:" + a.Url);

            IPEndPoint ipadd = IPHelper.CreateEndPoint(host, 443);
            byte[] bin = SslHttpClient.Get(ipadd, a, null);
            string result = Encoding.UTF8.GetString(bin);

            Variant re = JsonConvert.DeserializeObject<Variant>(result);
            if (re.GetIntOrDefault("ret", -1) == 0)
            {
                string token = re.GetStringOrDefault("token");
                if (!string.IsNullOrEmpty(token))
                {
                    if (CreateOrder(note.Player, token))
                    {
                        user.Call(MallCommand.NewTokenR, true, re);
                        return;
                    }
                }
            }
            user.Call(MallCommand.NewTokenR, false, re);
            //LogWrapper.Warn("请求结果:" + result);
        }
Example #4
0
 public static byte[] Post(IPEndPoint endpoint, HttpArgs args, X509CertificateCollection certificates = null)
 {
     return InternalSslSocketHttp(endpoint, args, HttpMethod.POST, certificates);
 }
Example #5
0
        static void TestSign()
        {
            var v = Encoding.GetEncoding(936);
            string meta = Convert.ToBase64String(Encoding.GetEncoding(936).GetBytes("10枚晶币*每10Q点可以兑换10枚晶币,祝您游戏愉快,谢谢您的支持!"));
            BuyGoodsRequest request = new BuyGoodsRequest();
            request.appmode = 2;
            request.device = 0;
            request.goodsmeta = meta;
            request.goodsurl = "http://ww.com.cn/test.png";
            request.openid = "00000000000000000000000000441794";
            request.openkey = "8EABE7C3586EA666327DFA1A2A38F088";
            request.payitem = "x*100*1";
            request.pf = "pengyou";
            request.pfkey = "7cbfc07c376f92b07e3bce209ee1ed47";
            request.zoneid = 5;

            const string host = "119.147.19.43";
            const string uri = "/v3/pay/buy_goods";

            StringBuilder sb = new StringBuilder(1000);
            string quest = request.Build(sb, null).ToString();
            string sign = AppSign.Sign(uri, quest);
            LogWrapper.Warn("签名源:" + quest);
            LogWrapper.Warn("签名结果:" + sign);

            sb.Clear();
            sb.Append(uri + "?");
            request.Build(sb);
            sb.Append("&sig=");
            sb.Append(sign);

            string xd = request.ToString();
            string result2 = "https://" + host + sb.ToString();
            Console.WriteLine(result2);

            HttpArgs a = new HttpArgs();
            a.Host = host;
            a.Url = sb.ToString();
            LogWrapper.Warn("请求内容:" + a.Url);

            IPEndPoint ipadd = new IPEndPoint(IPAddress.Parse(host), 443);
            byte[] bin = SslHttpClient.Get(ipadd, a, null);
            string result = Encoding.UTF8.GetString(bin);
            Console.WriteLine(result);
            LogWrapper.Warn("请求结果:" + result);
        }
Example #6
0
        private static void TestHttpClient()
        {
            IPEndPoint ep = new IPEndPoint(IPAddress.Parse("192.168.100.40"), 8200);
            HttpArgs arg = new HttpArgs();
            //arg.Body = "192.168.100.40";
            arg.Host = "192.168.100.40";
            arg.Url = "/gm?sig=32&cmd=noticeList&par=[\"dfs\",23,34]";
            byte[] getResult = HttpClient.Get(ep, arg);

            string xd = System.Text.Encoding.UTF8.GetString(getResult);
            Console.WriteLine(xd);

            HttpClient httpc = new HttpClient("192.168.100.40", 8200);
            string xd2 = httpc.Get(arg.Url);
            bool xd1Txd2 = (xd == xd2);
            Console.WriteLine(xd1Txd2);
        }
Example #7
0
 public static byte[] Post(IPEndPoint endpoint, HttpArgs args)
 {
     return InternalSocketHttp(endpoint, args, HttpMethod.POST);
 }
Example #8
0
 static byte[] InternalSocketHttp(IPEndPoint endpoint, HttpArgs args, HttpMethod method)
 {
     using (Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
     {
         try
         {
             client.Connect(endpoint);
             if (client.Connected)
             {
                 using (NetworkStream stream = new NetworkStream(client))
                 {
                     //生成协议包
                     byte[] buff = HttpClient.ParseHttpArgs(method, args);
                     stream.Write(buff, 0, buff.Length);
                     stream.Flush();
                     return ParseResponse(endpoint, stream, args);
                 }
             }
         }
         catch (Exception ex)
         {
             Console.WriteLine(ex.Message);
         }
     }
     return null;
 }
Example #9
0
 internal static byte[] ParseHttpArgs(HttpMethod method, HttpArgs args)
 {
     StringBuilder bulider = new StringBuilder(1024);
     if (method == HttpMethod.POST)
     {
         bulider.AppendLine(string.Format("POST {0} HTTP/1.1", args.Url));
         bulider.AppendLine("Content-Type: application/x-www-form-urlencoded");
     }
     else
     {
         bulider.AppendLine(string.Format("GET {0} HTTP/1.1", args.Url));
         bulider.AppendLine("Content-type:text/html;charset=utf-8");
         //bulider.AppendLine("Content-Type:text/plain;charset=GBK");
     }
     bulider.AppendLine(string.Format("Host: {0}", args.Host));
     bulider.AppendLine("Connection: Close");
     //bulider.AppendLine("User-Agent: Mozilla/5.0 (Windows NT 6.1; IE 9.0)");
     //if (!string.IsNullOrEmpty(args.Referer))
     //{
     //    bulider.AppendLine(string.Format("Referer: {0}", args.Referer));
     //}
     //if (!string.IsNullOrEmpty(args.Accept))
     //{
     //    bulider.AppendLine(string.Format("Accept: {0}", args.Accept));
     //}
     //if (!string.IsNullOrEmpty(args.Cookie))
     //{
     //    bulider.AppendLine(string.Format("Cookie: {0}", args.Cookie));
     //}
     if (method == HttpMethod.POST)
     {
         int len = Encoding.UTF8.GetByteCount(args.Body);
         bulider.AppendLine(string.Format("Content-Length:{0}\r\n", len));
         bulider.Append(args.Body);
     }
     else
     {
         bulider.Append("\r\n");
     }
     string header = bulider.ToString();
     return Encoding.UTF8.GetBytes(header);
 }