设置CookieContainer时HTTPWebRequest失败

时间:2019-02-27 06:01:34

标签: c# .net cookies httpwebrequest httpwebresponse

我使用Fiddler扩展RequestToCode来重播登录Yahoo的POST。

运行代码时,我可以在Fiddler中看到登录成功,并且响应中有10个cookie。

不过在我的代码中,响应。Cookies的计数为0。

所以我更新了HTTPWebRequest并进行了设置:

request.CookieContainer = new CookieContainer();

当我再次运行代码并在Fiddler中查看时,我看到登录失败,因为响应导航到失败的登录URL。

我的最终目标是从登录尝试中获取Cookie,以在以后的Yahoo Get请求中使用。

为什么设置cookie容器会导致失败?

1 个答案:

答案 0 :(得分:0)

可能是因为您在每个请求上都初始化了新的CookieContainer。 声明公共变量CookieContainer cookies = new CookieContainer();

现在,您的新请求将使用相同的CookieContainer,例如:

    var request = (HttpWebRequest)WebRequest.Create("https://www.yahoo.com/");
    request.CookieContainer = cookies;
    request.Method = "GET";
    request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36";
    request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
    request.Headers.Add("accept-language", "en,hr;q=0.9");
    request.Headers.Add("accept-encoding", "");
    request.Headers.Add("Upgrade-Insecure-Requests", "1");
    WebResponse response = request.GetResponse();
    StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
    string responseFromServer = reader.ReadToEnd();
    reader.Close();
    response.Close();