保存登录Cookie并将其用于其他请求 [英] Saving login Cookie and use it for other request

查看:89
本文介绍了保存登录Cookie并将其用于其他请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是C#的新手.我正在尝试使用C#发布请求登录网站.

I'm new to c#. I'm trying to login to a website, using a c# post request.

此代码是否将cookie实际保存到CookieContainer中,是否也可以让我在其他请求中使用此cookie?例如,我将如何使用从登录名中保存的cookie立即发布获取请求?

Does this code save the cookie actually to the CookieContainer and would it let me use this cookie in other requests also? How would I for example post a get request now with the cookie I saved from the login?

我的主要代码:

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        string userName = textBox1.Text;
        string passWord = textBox2.Text;
        string postData = "username=" + userName + "&password=" + passWord;
        string requestUrl = "http://registration.zwinky.com/registration/loginAjax.jhtml";

        post botLogin = new post();
        botLogin.postToServer (postData ,requestUrl);
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error :" + ex.Message);
    }
}

我的帖子类别:

public class post
{
    public void postToServer(string postData, string requestUrl)
    {
        HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(requestUrl);
        myHttpWebRequest.Method = "POST";

        byte[] data = Encoding.ASCII.GetBytes(postData);

        myHttpWebRequest.CookieContainer = new CookieContainer();

        myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
        myHttpWebRequest.ContentLength = data.Length;

        Stream requestStream = myHttpWebRequest.GetRequestStream();
        requestStream.Write(data, 0, data.Length);
        requestStream.Close();

        HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();

        Stream responseStream = myHttpWebResponse.GetResponseStream();
        StreamReader myStreamReader = new StreamReader(responseStream, Encoding.Default);

        string pageContent = myStreamReader.ReadToEnd();

        myStreamReader.Close();
        responseStream.Close();

        myHttpWebResponse.Close();
        MessageBox.Show(pageContent);
    }
}

推荐答案

您需要在请求和响应之间共享CookieContainer.我目前正在使用类似的代码:

You need to share the CookieContainer between the requests and the responses. I have similar code currently working:

public YourClass
{
    private CookieContainer Cookies;

    public YourClass()
    {
        this.Cookies= new CookieContainer(); 
    }

    public void SendAndReceive()
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(...);
        ....
        request.UserAgent = agent;
        request.Method = "GET";
        request.ContentType = "text/html";
        request.CookieContainer = this.Cookies;
        ....

        this.Cookies = (HttpWebResponse)request.GetResponse().Cookies;
    }
}

这篇关于保存登录Cookie并将其用于其他请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆