aaaaaaaaaaaaa

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using ServiceStack.Common;
using ServiceStack.Text;
using System.IO;
using System.Net;

namespace Sina
{
    class Program
    {
        static void Main(string[] args)
        {
            //step1 获取登录参数
            var stepUrl = @"http://login.sina.com.cn/sso/prelogin.php?entry=sso&callback=sinaSSOController.preloginCallBack&su=tang_guoan@163.com&rsakt=mod&client=ssologin.js(v1.4.4)";
            var stepData = stepUrl.GetJsonFromUrl();
            //stepData=sinaSSOController.preloginCallBack({"retcode":0,"servertime":1382160006,"pcid":"gz-4c4f8847a4eb74232e0dd998388f6354b59e","nonce":"I6QPVA","pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","exectime":1})
            var s = Convert.ToInt32("10001",16);
            //step2解析参数
            var startIndex = stepData.IndexOf("(");
            stepData = stepData.Substring(startIndex + 1, stepData.Length - startIndex - 1);
            JsonSerializer<SinaPara> jsonSerializer = new JsonSerializer<SinaPara>();
            var sinaPara = jsonSerializer.DeserializeFromString(stepData);

            //step3 构建登录参数
            var userName = ""; //Base64.Base64Code("=");
         
            var encryptContent =sinaPara.servertime+ "\t"+sinaPara.nonce+"\n"+"";

            var length = sinaPara.pubkey.Length;
            var strEncrypt = RSAEncrypt(sinaPara.pubkey, "010001", encryptContent);
            var passWord = StringToHex(strEncrypt);
            var para = new Dictionary<string, string> 
           {
               {"entry","weibo"},
               {"gateway","1"},
{"from",""},
{"savestate","7"},
{"userticket","1"},
{"ssosimplelogin","1"},
{"pagerefer","http://login.sina.com.cn/sso/logout.php?entry=miniblog&r=http%3A%2F%2Fweibo.com%2Flogout.php%3Fbackurl%3D%252F"},
{"vsnf","1"},
{"su",userName},
{"service","miniblog"},
{"servertime",sinaPara.servertime},
{"nonce",sinaPara.nonce},
{"pwencode","rsa2"},
{"sp",passWord},
{"encoding","utf-8"},{"prelt","158"},{"rsakv",sinaPara.rsakv},{"url",@"http://weibo.com/ajaxlogin.php?framelogin=1\&callback=parent.sinaSSOController.feedBackUrlCallBack"},
{"returntype","META"}
           };
            
             

            var paraJson = new JsonSerializer<Dictionary<string, string>>().SerializeToString(para);

            StringBuilder sb = new StringBuilder();
            foreach (var item in para)
            {
                sb.Append("&" + item.Key + "=" + System.Web.HttpUtility.UrlEncode(item.Value));
            }
            var strp = sb.ToString();
            strp = strp.Substring(1, strp.Length - 1);

            byte[] postbyte = System.Text.Encoding.Default.GetBytes(paraJson);
            var loginUrl = @"http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.4)";
            var re = requestPost(strp, loginUrl);
            Console.WriteLine( re);
            

            var str = "http://weibo.com/u/2510062424/home?wvr=5&lf=reg".GetStringFromUrl();

           

           Console.WriteLine(str);
           Console.Read();
           Console.Read();

        }
        public static string requestPost(string postData, string uriStr)
        {

            HttpWebRequest requestScore = (HttpWebRequest)WebRequest.Create(uriStr);
            //postData = 
            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] data = encoding.GetBytes(postData);
            requestScore.Method = "Post";
            requestScore.ContentType = "application/x-www-form-urlencoded";
            requestScore.ContentLength = data.Length;
            requestScore.KeepAlive = true;
            requestScore.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36";
            requestScore.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
            requestScore.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
            requestScore.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
            //使用cookies
            //requestScore.CookieContainer = ...;
            Stream stream = requestScore.GetRequestStream();
            stream.Write(data, 0, data.Length);
            stream.Close();
            HttpWebResponse responseSorce = (HttpWebResponse)requestScore.GetResponse();
            StreamReader reader = new StreamReader(responseSorce.GetResponseStream(), Encoding.UTF8);
            string content = reader.ReadToEnd();

            requestScore = null;
            responseSorce.Close();
            responseSorce = null;
            reader = null;
            stream = null;

            return content;
        }
        public static string StringToHex(string str)
        {
            //str = str.Trim();
            byte[] ByteFoo = System.Text.Encoding.Default.GetBytes(str);
            string TempStr = "";
            foreach (byte b in ByteFoo)
            {
                TempStr += b.ToString("x"); //X表示十六进制显示
            }
            return TempStr;
        } 

        public static string RSAEncrypt(string publickey, string rsakv, string content)
        {
           // publickey = @"<RSAKeyValue><Modulus>" + publickey + "</Modulus><Exponent>" + rsakv + "</Exponent></RSAKeyValue>";
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            byte[] cipherbytes;

            RSAParameters rsaParameters = new RSAParameters()
            {
                Exponent = FromHex(rsakv), // new byte[] {01, 00, 01}
                Modulus = FromHex(publickey),   // new byte[] {A3, A6, ...}
            };
            rsa.ImportParameters(rsaParameters);
            //rsa.FromXmlString(publickey);
            cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content),false);
          
            return Convert.ToBase64String(cipherbytes);
        }

        
        static byte[] FromHex(string hex)
        {
            if (string.IsNullOrEmpty(hex) || hex.Length % 2 != 0) throw new ArgumentException("not a hexidecimal string");
            List<byte> bytes = new List<byte>();
            for (int i = 0; i < hex.Length; i += 2)
            {
                bytes.Add(Convert.ToByte(hex.Substring(i, 2), 16));
            }
            return bytes.ToArray();
        }
    }
    public class SinaPara
    {
        public int retcode { get; set; }
        public string servertime { get; set; }
        public string pcid { get; set; }
        public string nonce { get; set; }
        public string pubkey { get; set; }
        public string rsakv { get; set; }
        public int exectime { get; set; }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值