Quantcast

What works and what is paused · Email is limited to account activation and password resets.

Jump to content


Photo

Any simple C# Neopets login example?


  • Please log in to reply
7 replies to this topic

#1 HiMyNameIsNick

HiMyNameIsNick
  • Shitlord

  • 1730 posts


Users Awards

Posted 03 August 2016 - 08:49 PM

I'm learning C# and I'm interested in learning GET/POST :)



Advertisement

    #2 Adam

    Adam
    • Coffee God

    • 4771 posts


    Users Awards

    Posted 04 August 2016 - 07:11 AM

    Don't forget that you also need a wrapper.

    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Text.RegularExpressions;
    using System.IO;
    using System.IO.Compression;
    using System.Net.Sockets;
     
    namespace goodwrap
    {
        class wrapper
        {
            private TcpClient client;
            IDictionary<string, string> colCookies = new Dictionary<string, string>();
            public string strCookies;
            public string LastPage;
     
            public string Request(string Method, string URL, string Referer)
            {
                string Host = null;
                string strFile = null;
                string strPost = null;
                int pos = 0;
     
                if (Referer == null)
                {
                    Referer = LastPage;
                }
                if (URL.Contains("http://"))
                {
                    Host = URL.Substring(7);
                }
                else
                {
                    Host = URL;
                }
                if (Host.Contains("/"))
                {
                    pos = Host.IndexOf("/", 0);
                    strFile = Host.Substring(pos);
                    Host = Host.Substring(0, pos);
                }
                else
                {
                    strFile = "/";
                }
                if (Method == "POST")
                {
                    pos = strFile.IndexOf("?");
                    if (pos != -1)
                    {
                        strPost = strFile.Substring(pos + 1);
                        strFile = strFile.Substring(0, pos);
                    }
                    else
                    {
                        strPost = null;
                    }
                }
                LastPage = URL;
     
                string ReqHeaders = null;
                if (Method == "GET" || Method == "PIC")
                {
                    ReqHeaders = "GET" + " " + strFile + " HTTP/1.1" + "\r\n"
                    + "Host: " + Host + "\r\n"
                    + "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4 (.NET CLR 3.5.30729)" + "\r\n"
                    + "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/ *;q=0.5" + "\r\n"
                    + "Accept-Language: en-us,en;q=0.5" + "\r\n"
                    + "Accept-Encoding: gzip, deflate" + "\r\n"
                    + "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" + "\r\n"
                    + "Keep-Alive: 300" + "\r\n"
                    + "Connection: keep-alive" + "\r\n"
                    + "Referer: " + Referer + "\r\n"
                    + "Cookie: " + strCookies + "\r\n" + "\r\n";
                }
                else
                {
                    ReqHeaders = "POST " + strFile + " HTTP/1.1" + "\r\n"
                    + "Host: " + Host + "\r\n"
                    + "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4 (.NET CLR 3.5.30729)" + "\r\n"
                    + "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/ *;q=0.5" + "\r\n"
                    + "Accept-Language: en-us,en;q=0.5" + "\r\n"
                    + "Accept-Encoding: gzip, deflate" + "\r\n"
                    + "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" + "\r\n"
                    + "Keep-Alive: 300" + "\r\n"
                    + "Connection: keep-alive" + "\r\n"
                    + "Referer: " + Referer + "\r\n"
                    + "Cookie: " + strCookies + "\r\n"
                    + "Content-Type: application/x-www-form-urlencoded" + "\r\n"
                    + "Content-Length: " + strPost.Length.ToString() + "\r\n"
                    + "Connection: close" + "\r\n" + "\r\n"
                    + strPost;
                }
                if (Method == "PIC") ReqHeaders.Replace("Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/ *;q=0.5", "Accept: image/png,*/*;q=0.5");
     
                client = new TcpClient(Host, 80);
                Byte[] headers = System.Text.Encoding.ASCII.GetBytes(ReqHeaders);
                NetworkStream ns = client.GetStream();
                ns.Write(headers, 0, headers.Length);
                StreamReader sr = new StreamReader(ns, Encoding.Default);
                String strHTML = sr.ReadToEnd();
     
                string[] strParts = Regex.Split(strHTML, Environment.NewLine + Environment.NewLine);
                strCookies = ParseCookies(strParts[0]);
                if (strParts[0].Contains("Content-Encoding"))
                {
                    strParts[1] = DecompressGzip(strParts[1]);
                }
                return strParts[0] + Environment.NewLine + Environment.NewLine + strParts[1];
            }
     
            public string DecompressGzip(string compressed)
            {
                MemoryStream memStream = new MemoryStream(System.Text.Encoding.Default.GetBytes(compressed));
                GZipStream decompressStream = new GZipStream(memStream, CompressionMode.Decompress);
     
                byte[] endBytes = new byte[4];
                int position = (int)memStream.Length - 4;
                memStream.Position = position;
                memStream.Read(endBytes, 0, 4);
                memStream.Position = 0;
                byte[] buffer = new byte[BitConverter.ToInt32(endBytes, 0) + 100];
                int offset = 0;
                int total = 0;
                while (true)
                {
                    int o = decompressStream.Read(buffer, offset, 100);
                    if (o == 0) break;
                    offset += o;
                    total += o;
                }
                return Encoding.ASCII.GetString(buffer);
            }
     
            public string NeoLogin(string user, string pass, ref bool loggedIn)
            {
                string strHTML = null;
                Request("GET", "http://neopets.com/loginpage.phtml", "http://google.com");
                Pause(1);
                Request("POST", "http://www.neopets.com/hi.phtml?destination=%2Fpetcentral.phtml&username=" + user, "http://neopets.com/loginpage.phtml");
                Pause(1);
                strHTML = Request("POST", "http://www.neopets.com/login.phtml?username=" + user + "&password=" + pass + "&destination=%2Fpetcentral.phtml", "http://neopets.com/hi.phtml");
                if (strHTML.Contains("Set-Cookie: neologin="))
                {
                    loggedIn = true;
                    return "Logged In";
                }
                else if (strHTML.Contains("too many times"))
                {
                    loggedIn = false;
                    return "To Many Login Attempts";
                }
                else if (strHTML.Contains("badpassword"))
                {
                    loggedIn = false;
                    return "Wrong Password";
                }
                else if (strHTML.Contains("frozen"))
                {
                    loggedIn = false;
                    return "Account Frozen";
                }
                else if (strHTML.Contains("just a technical problem"))
                {
                    loggedIn = false;
                    return "Neopets is down for maintenance.";
                }
                else
                {
                    loggedIn = false;
                    return strHTML;
                }
            }
     
            private static void Pause(double seconds)
            {
                double num = seconds * 1000;
                DateTime t1 = DateTime.Now, t2 = DateTime.Now;
                TimeSpan tmDiff = t2 - t1;
                while (Convert.ToDouble(tmDiff.TotalMilliseconds.ToString()) < num)
                {
                    t2 = DateTime.Now;
                    tmDiff = t2 - t1;
                    Application.DoEvents();
                }
            }
     
            public string StripHeaders(string strSource)
            {
                string[] strParts = Regex.Split(strSource, Environment.NewLine + Environment.NewLine);
                return strParts[1];
            }
     
            public Bitmap GrabPic(string strURL)
            {
                MemoryStream memStream = new MemoryStream(System.Text.Encoding.Default.GetBytes(StripHeaders(Request(" GET", strURL, LastPage))));
                Bitmap bitmap = new Bitmap(memStream);
                return bitmap;
            }
     
            public void ClearCookies()
            {
                colCookies.Clear();
                strCookies = null;
            }
     
            public string ParseCookies(string Headers)
            {//Credit's to Mystical for RegEx
                string ParseCookies = null;
                MatchCollection matches;
                Regex reg = new Regex(@"Set-Cookie:\s*(.+?)=(.+?);", RegexOptions.IgnoreCase);
                if (reg.IsMatch(Headers))
                {
                    matches = reg.Matches(Headers);
                    foreach (Match m in matches)
                    {
                        if (colCookies.ContainsKey(m.Groups[1].ToString()))
                        {
                            colCookies.Remove(m.Groups[1].ToString());
                            colCookies.Add(m.Groups[1].ToString(), m.Groups[1].ToString() + "=" + m.Groups[2].ToString());
                        }
                        else
                        {
                            colCookies.Add(m.Groups[1].ToString(), m.Groups[1].ToString() + "=" + m.Groups[2].ToString());
                        }
                    }
                }
                foreach (KeyValuePair<string, string> item in colCookies)
                {
                    ParseCookies = ParseCookies + item.Value.ToString() + "; ";
                }
                return ParseCookies;
     
            }
        }
    }
    
    private void Login_Click(object sender, EventArgs e)
            {
               
                var loggedIn = false;
     
                myWrapper.NeoLogin(user.Text, pass.Text, ref loggedIn);
     
                if (loggedIn)
                {
                    
                    MessageBox.Show("We're successfully logged in. Congratulations.", "SUCCESS", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    
                }
                    else
                {
                    
                    MessageBox.Show("Your login was not successful.", "FAIL", MessageBoxButtons.OK, MessageBoxIcon.Hand);
     
                }
                
    

    You'll have to declare...

    goodwrap.wrapper myWrapper = new goodwrap.wrapper();

    ...in your public partial class.



    #3 HiMyNameIsNick

    HiMyNameIsNick
    • Shitlord

    • 1730 posts


    Users Awards

    Posted 04 August 2016 - 08:42 AM

    Don't forget that you also need a wrapper.

     

     

    Nice! Thank you Adam :D



    #4 Adam

    Adam
    • Coffee God

    • 4771 posts


    Users Awards

    Posted 06 August 2016 - 01:42 PM

    Nice! Thank you Adam :D

    No problemo! Let me know if you have any questions; I'm far far far from the best at C#, but I can help answer some pretty basic questions.



    #5 Verge

    Verge
    • 41 posts


    Users Awards

    Posted 08 September 2016 - 06:12 PM

    THANK YOU SO MUCH @Adam FOR SHARING THE CODE!!! :o

    I tried your code and was able to get to to login successfully.

     

    Once I have logged in, lets say i want to navigate from the petcentral to the bank. What code do I used? And the same time I would like to retrieve the page and store it as a string.

     

    Simillar to this line of code. I would like to mimic something like it where it takes the url of the page as a parameter and also the referring page to replicate user navigation from the site. But I would like to retrieve the webpage as a string.

     

    strHTML = Request("POST", "http://www.neopets.c...html?username=" + user + "&password=" + pass + "&destination=%2Fpetcentral.phtml", "http://neopets.com/hi.phtml");

     

     

     

    Hopefully someone can help me with this.

     

    Thanks,

    Verge



    #6 Dan

    Dan
    • Resident Know-It-All

    • 6382 posts


    Users Awards

    Posted 09 September 2016 - 05:25 AM

    Disclaimer: this is 4 years old and can probably be done much better with new C# standards, including async/await among other improvements. It'll probably still work though.

     

     

    This is a really small, simple (aptly named as such) HTTP Wrapper written in C#.

    Features:

    • GET and POST methods supported (no PUT)
    • Cookie management
    • Proxy support
    • Custom user-Agent
    • Gzip decompression

    Usage - Setup w/ proxy and custom user agent

    var proxy = new WebProxy("127.0.0.1", 8888);
    proxy.Credentials = new NetworkCredential("foo", "bar");
    
    var options = new WrapperOptions(proxy, "Mozilla/5.0 (Macintosh; Intel...snip");
    var wrapper = new SimpleWrapper(options);

    Usage - Humanised Neopets login (GET & POST)
    GetString and PostString are the two methods used for GET and POST HTTP requests. Both return the HTML from the HTTP response, sans any headers.

    wrapper.GetString("http://www.neopets.com");
    
    var loginResponse = wrapper.PostString(
    "http://www.neopets.com/login.phtml",
    string.Format("destination=%252F&username={0}&password={1}", username, password));

    Attached Files



    #7 Verge

    Verge
    • 41 posts


    Users Awards

    Posted 11 September 2016 - 02:43 PM

    Thanks @Dan ! I will give your code a try  :ninja:



    #8 crazycga

    crazycga
    • 66 posts

    Posted 18 January 2017 - 06:34 AM

    Wow, thank you very much @Adam!  This is awesome!




    1 user(s) are reading this topic

    0 members, 1 guests, 0 anonymous users