C#Httpwebrequest登录系统

时间:2015-12-02 21:42:13

标签: c# httpwebrequest

以下代码应该记录用户,但它不起作用。代码使用9gag作为示例,但一般的想法也应该在其他地方工作。用户无法访问他/她的个人资料。

代码有什么问题?

using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;


    namespace ttp_B
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            bool flag = false;
            //string word_to_stop = "profile"; 
            string urltosite = "https://9gag.com/login"; // site that i'm trying to log in
            string emailaddress = "";
            string password = "";
            var coo = new System.Net.CookieContainer();
            try
            {
                var request = System.Net.WebRequest.Create(urltosite) as System.Net.HttpWebRequest;
                request.CookieContainer = coo;
                request.Method = "POST";
                request.Proxy = new WebProxy("127.0.0.1", 8888); // fiddler 
                                                                 //some extra headers
                request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0";
                using (var stream = request.GetRequestStream())
                {
                    byte[] buffer =
                        Encoding.UTF8.GetBytes(
                            string.Format(
                                "csrftoken=&next=http%3A%2F%2F9gag.com%2F&location=1&username={0}&password={1}", emailaddress, password));
                    //this text of request is correct I guess. Got it from fiddler btw.
                    stream.Write(buffer, 0, buffer.Length);
                    stream.Close();
                }
                using (var response = request.GetResponse() as HttpWebResponse)
                {
                    coo.Add(response.Cookies); // adding cookies, just to make this working properly
                    using (var sr = new System.IO.StreamReader(response.GetResponseStream()))
                    {
                        string http_code = sr.ReadToEnd(); // gettin' that new html document
                        //flag = (http_code.Contains(word_to_stop)); // looking for word that I'm sure exist after succesfull loggin' in
                                                                   //if(flag == true)
                                                                   //{
                                                                   //    console.writeline("Works");
                                                                   //}
                    }
                }
            }
            catch (WebException e)
            {
                Console.Write(e.ToString());
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

据我所知,在您进行回复之前,请求流尚未关闭。

简化它应该是这样的:

var stream = request.GetRequestStream();
tStream(buffer, 0, buffer.Length);

//close the stream
tStream.Close();

//go for the response
request.GetResponse();