Search code examples
c#authenticationhttpwebrequestfiddler

Garbage text in GetResponseStream()


I keep getting garbage text like this

�\b\0\0\0\0\0\0�\a`I�%&/m�{J�J��t�\b�`$ؐ@������iG#

in my html variable at the end of this function. As you can see, by the commented out code, I have tried both methods of inserting Cookies.

I am very new to HTTPwebRequest / Response methods like this. But from everything I can find on the web I am setting up my method correctly. I would love some help if possible.

Also, when using Fiddler to decode my requests, not all of my cookies are getting sent. I am only sending 1 utma, 1 utmb, 1 utmc, and 1 utmz when my code runs. However, when I log into the site normally, i receive 2 utma, 1 utmb, 2 utmc, and 2 utmz.

I feel that this is the source of my connecting issues but I am not sure.

static void FillCookieJar()
{
    Console.WriteLine("Filling cookie jar...\r\n");
    try
    {
        string parameters = "SUPER LONG POST DATA found from TEXTVIEW in Fidler";
        Uri target = new Uri("https://foo.bar.com/UserSignIn");

        byte[] buffer = Encoding.ASCII.GetBytes(parameters);

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(target);

        //Cookie chipOne = new Cookie("__utma", "XXXXXXXXX.XXXXXXXXX.XXXXXXXXX.XXXXXXXXX.XXXXXXXXX.XX") { Domain = target.Host };
        //Cookie chipTwo = new Cookie("__utma", "XXXXXXXXX.XXXXXXXXX.XXXXXXXXX.XXXXXXXXX.XXXXXXXXX.X") { Domain = target.Host };
        //Cookie chipThree = new Cookie("__utmb", "XXXXXXXXX.X.XX.XXXXXXXXX") { Domain = target.Host };
        //Cookie chipFour = new Cookie("__utmc", "XXXXXXXXX") { Domain = target.Host };
        //Cookie chipFive = new Cookie("__utmc", "XXXXXXXXX") { Domain = target.Host };
        //Cookie chipSix = new Cookie("__utmz", "XXXXXXXXX.XXXXXXXXX.X.X.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)") { Domain = target.Host };
        //Cookie chipSeven = new Cookie("__utmz", "XXXXXXXXX.XXXXXXXXX.XX.X.utmcsr=titlesource.com|utmccn=(referral)|utmcmd=referral|utmcct=/") { Domain = target.Host };

        //cookieJar.Add(chipOne);
        //cookieJar.Add(chipTwo);
        //cookieJar.Add(chipThree);
        //cookieJar.Add(chipFour);
        //cookieJar.Add(chipFive);
        //cookieJar.Add(chipSix);
        //cookieJar.Add(chipSeven);

        request.Headers.Add("__utma", "XXXXXXXXX.XXXXXXXXX.XXXXXXXXX.XXXXXXXXX.XXXXXXXXX.XX");
        request.Headers.Add("__utma", "XXXXXXXXX.XXXXXXXXX.XXXXXXXXX.XXXXXXXXX.XXXXXXXXX.X");
        request.Headers.Add("__utmb", "XXXXXXXXX.X.XX.XXXXXXXXX");
        request.Headers.Add("__utmc", "XXXXXXXXX");
        request.Headers.Add("__utmc", "XXXXXXXXX");
        request.Headers.Add("__utmz", "XXXXXXXXX.XXXXXXXXX.X.X.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)");
        request.Headers.Add("__utmz", "XXXXXXXXX.XXXXXXXXX.XX.X.utmcsr=titlesource.com|utmccn=(referral)|utmcmd=referral|utmcct=/");

        request.CookieContainer = cookieJar;
        request.Method = WebRequestMethods.Http.Post;
        request.KeepAlive = true;
        request.Accept = "*/*";
        request.Headers.Add("Cache-Control", "no-cache");
        request.Headers.Add("Accept-Encoding: gzip,deflate,sdch");
        request.Headers.Add("Accept-Language: en-US,en;q=0.8");
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36";
        request.Headers.Add("X-Requested-With: XMLHttpRequest");
        request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
        request.Referer = "https://foo.bar.com/UserSignIn";
        request.Headers.Add("Origin", "https://foo.bar.com");
        request.Headers.Add("X-MicrosoftAjax", "Delta=true");
        request.ContentLength = buffer.Length;

        Stream PostData = request.GetRequestStream();
        PostData.Write(buffer, 0, buffer.Length);
        PostData.Close();

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

        Stream Answer = response.GetResponseStream();
        StreamReader _Answer = new StreamReader(Answer);
        String html = _Answer.ReadToEnd();
        response.Close();

    }
    catch (Exception ex)
    {
        Console.WriteLine("Error FillingCookieJar");
    }
}

Solution

  • You need to decompress the gzipped stream to get back the plain text, which is likely in UTF-8 rather than ASCII (look for a charset attribute on the response's Content-Type header).

    You can use the AutomaticDecompression property to automatically decompress the content.

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(target);
    request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; 
    

    The url you see is UrlEncoded. You can use HttpUtility.UrlDecode to get the URL to look like https://foo.bar.com/Vendor.

    string decoded = HttpUtility.UrlDecode(html);