使用 Cookie 的 C# WebRequest [英] C# WebRequest using Cookies

查看:25
本文介绍了使用 Cookie 的 C# WebRequest的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个我一直在开发的 winforms 应用程序,它对消费者帐户运行多个测试.测试需要一次性登录才能执行.

I have a winforms application i have been working on that runs multiple tests on consumer accounts. The tests require a one time login in order to execute.

string paramaters = "authmethod=on&chkRememberMe=on&login-form-type=pwd&password=" + pw.Text + "&userid=" + uid.Text + "&username=" + uid.Text;
        string strResponse;
        HttpWebRequest requestLogin = (HttpWebRequest)WebRequest.Create("https://www.url.com/login.form");
        requestLogin.Method = "POST";
        requestLogin.CookieContainer = cookieJar;
        requestLogin.ContentType = "application/x-www-form-urlencoded";

        requestLogin.ContentLength = paramaters.Length;
        StreamWriter stOut = new StreamWriter(requestLogin.GetRequestStream(), System.Text.Encoding.ASCII);
        stOut.Write(paramaters);
        stOut.Close();

        StreamReader stIn = new StreamReader(requestLogin.GetResponse().GetResponseStream());
        strResponse = stIn.ReadToEnd();
        stIn.Close();

此脚本适用于登录就好了,问题是当我需要实际运行测试时,我需要将所有结果返回到一个字符串(HTML 结果)中.

This script works for the login just fine, the problem is when i need to actually run the tests i need to return all the results into a string (HTML results).

private string runTestRequest(Uri url, string parameters)
    {
        string testResults = string.Empty;
        HttpWebRequest runTest = (HttpWebRequest)WebRequest.Create(url);
        runTest.CookieContainer = cookieJar;
        runTest.Method = "POST";
        runTest.ContentType = "application/x-www-form-urlencoded";
        StreamWriter stOut = new StreamWriter(runTest.GetRequestStream(), System.Text.Encoding.ASCII);
        stOut.Write(parameters);
        stOut.Close();
        StreamReader stIn = new StreamReader(runTest.GetResponse().GetResponseStream());
        testResults = stIn.ReadToEnd();
        stIn.Close();
        return testResults;
    }

但它会尝试登录.我如何将上一个登录请求中的 Cookie 与此 + 许多其他网络请求一起使用?

But it goes and tries to login. How can i use the Cookie from the previous login request with this + many other web requests?

感谢您的帮助.

我将它添加到我的代码中,但它应该做与 BrokenGlass 所说的相同的事情,只是有一点不同但仍然不起作用.

I added this to my code yet which should do the same thing as BrokenGlass is saying except just a little different but still doesn't work.

foreach (Cookie cookie in responseLogin.Cookies)
        {
            cookieJar.Add(new Cookie(cookie.Name.Trim(), cookie.Value.Trim(), cookie.Path, cookie.Domain));
            richTextBox2.Text += cookie.Name.ToString() + Environment.NewLine + cookie.Value.ToString() + Environment.NewLine + cookie.Path.ToString() + Environment.NewLine + cookie.Domain.ToString();
        }

推荐答案

这样的事情应该可以工作,我正在使用类似的代码来保存登录 cookie:

Something like this should work, I am using similar code to save a login cookie:

HttpWebRequest runTest;
//...do login request
//get cookies from response

CookieContainer myContainer = new CookieContainer();
for (int i = 0; i < Response.Cookies.Count; i++)
{
   HttpCookie http_cookie = Request.Cookies[i];
   Cookie cookie = new Cookie(http_cookie.Name, http_cookie.Value, http_cookie.Path);
   myContainer.Add(new Uri(Request.Url.ToString()), cookie);
}

//later:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.url.com/foobar");
request.CookieContainer = myContainer;

这篇关于使用 Cookie 的 C# WebRequest的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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