简体   繁体   中英

Can I do method 'Get' then 'Post' in a HTTPWebRequest?

First, I apologize for the english ability ^^

target: I want POST a data to a Login website. but the data contain a value (the value different after refresh website) that i must GET from website. So, i do 'GET' method first, and get the value , then i do 'POST' method & i get the error 'This property cannot be set after writing has started.' in 'content-length'

My code:

         HttpWebRequest wr = HttpWebRequest.Create("https://www.fshare.vn/login") as HttpWebRequest;
        wr.KeepAlive = true;

        // get the value
        HttpWebResponse wrep = wr.GetResponse() as HttpWebResponse;
        Stream streamReponse = wrep.GetResponseStream();
        StreamReader reader = new StreamReader(streamReponse);
        string httpDoc = reader.ReadToEnd();
        string fs_csrt = getfs_csrf(httpDoc);

        wr.CookieContainer = new CookieContainer();
        wr.CookieContainer.Add(wrep.Cookies);

        reader.Close();
        streamReponse.Close();
        wrep.Close();


        // Post into website

        string postDataString = @"POST /login fs_csrf={0}
                            &LoginForm%5Bemail%5D=abcd%40yahoo.com.vn
                            &LoginForm%5Bpassword%5D=abcd
                            &LoginForm%5Bcheckloginpopup%5D=0
                            &LoginForm%5BrememberMe%5D=0
                            &yt0=%C4%90%C4%83ng+nh%E1%BA%ADp
                            ";
        postDataString = string.Format(postDataString, fs_csrt);
        MessageBox.Show("I will post: " + postDataString);

        byte[] postDatabyte = Encoding.ASCII.GetBytes(postDataString);



        wr.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36";
        wr.Method = "POST";
        wr.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        wr.KeepAlive = true;
        wr.ContentType = "application/x-www-form-urlencoded";
        //wr.ContentLength = postDatabyte.Length;

        Stream stream = wr.GetRequestStream();
        stream.Write(postDatabyte, 0, postDatabyte.Length);
        stream.Close();

        // get the result
        HttpWebResponse wrep2 = wr.GetResponse() as HttpWebResponse;
        Stream streamReponse2 = wrep2.GetResponseStream();
        StreamReader reader2 = new StreamReader(streamReponse2);
        string httpDoc2 = reader2.ReadToEnd();

        Clipboard.SetText(httpDoc2);
        MessageBox.Show("Post done");   

Please help me T_T

You are getting that error because request Type Get can not have body.

You should create another request object by invoking Create method of HttpWebRequest and then use that object to post the data.

HttpWebRequest anotherWR = HttpWebRequest.Create("https://www.fshare.vn/login") as HttpWebRequest;
anotherWR.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36";
anotherWR.Method = "POST";
anotherWR.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
anotherWR.KeepAlive = true;
anotherWR.ContentType = "application/x-www-form-urlencoded";
Stream stream = wr.GetRequestStream();
stream.Write(postDatabyte, 0, postDatabyte.Length);
stream.Close();

...
...
...
//and your logic...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM