【问题标题】:Get cookies from httpwebrequest从 httpwebrequest 获取 cookie
【发布时间】:2013-04-29 02:42:52
【问题描述】:

我正在尝试使用此代码从网站获取所有 cookie

        CookieContainer cookieJar = new CookieContainer();

        var request = (HttpWebRequest)HttpWebRequest.Create("http://www.foetex.dk/ugenstilbud/Pages/Zmags.aspx");
        request.CookieContainer = cookieJar;

        var response = request.GetResponse();

        foreach (Cookie c in cookieJar.GetCookies(request.RequestUri))
        {
            Console.WriteLine("Cookie['" + c.Name + "']: " + c.Value);
        }

        Console.ReadLine();

我唯一想要的是用 console.writeline 显示,但我没有得到它们。

【问题讨论】:

  • 这会将 request 的 cookie 集合设置为一个空列表,然后尝试从该列表中查找一个 cookie,但不会返回任何内容。如果您希望从与您的请求联系的网站返回 cookie,您需要在 response 中查找 cookie。

标签: c# cookies


【解决方案1】:

要获取cookie列表,可以使用下面的方法;

private async Task<List<Cookie>> GetCookies(string url)
{
    var cookieContainer = new CookieContainer();
    var uri = new Uri(url);
    using (var httpClientHandler = new HttpClientHandler
    {
        CookieContainer = cookieContainer
    })
    {
        using (var httpClient = new HttpClient(httpClientHandler))
        {
            await httpClient.GetAsync(uri);
            return cookieContainer.GetCookies(uri).Cast<Cookie>().ToList();
        }
    }
}

【讨论】:

    【解决方案2】:
    //Please use this,
    HttpWebRequest request = null;
    request = HttpWebRequest.Create(StringURL) as HttpWebRequest;                
    HttpWebResponse TheRespone = (HttpWebResponse)request.GetResponse();
    String setCookieHeader = TheRespone.Headers[HttpResponseHeader.SetCookie];
    

    【讨论】:

    • 谢谢,这使我免于使用这种 awful 方法进行故障排除:OperationContext.Current.IncomingMessageHeaders[HttpRequestHeader.Cookie]
    【解决方案3】:

    以下示例使用 HttpCookie 类及其属性来读取具有特定名称的 cookie。

    HttpCookie myCookie = new HttpCookie("MyTestCookie");
    myCookie = Request.Cookies["MyTestCookie"];
    
    // Read the cookie information and display it.
    if (myCookie != null)
       Response.Write("<p>"+ myCookie.Name + "<p>"+ myCookie.Value);
    else
       Response.Write("not found");
    

    检索HttpWebResponseHttpWebResponse.Cookies 属性中的值。在此示例中,cookie 被检索并保存到隔离存储中:

    private void ReadCallback(IAsyncResult asynchronousResult)
    {
        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
        HttpWebResponse response = (HttpWebResponse)
            request.EndGetResponse(asynchronousResult);
        using (IsolatedStorageFile isf =
            IsolatedStorageFile.GetUserStoreForSite())
        {
            using (IsolatedStorageFileStream isfs = isf.OpenFile("CookieExCookies",
                FileMode.OpenOrCreate, FileAccess.Write))
            {
                using (StreamWriter sw = new StreamWriter(isfs))
                {
                    foreach (Cookie cookieValue in response.Cookies)
                    {
                        sw.WriteLine("Cookie: " + cookieValue.ToString());
                    }
                    sw.Close();
                }
            }
    
        }
    }
    

    【讨论】:

    • 感谢您的回复,我该怎么做作为参数传递给函数以检索 cookie。
    • @DavidJunker 不客气!我也是,我要睡觉了 :) 如果我的回答解决了您的问题,请单击“接受为解决方案”按钮,这样做会帮助其他人知道解决方案。
    • 这对我来说还是太抽象了,我不太明白如何检索和显示我想要的令牌。
    • 我试图让它变得有意义,但它没有,而且我不知道如何使用它来检索 cookie,例如我的链接。这不是我的问题的明确答案,因此我无法将其标记为已解决。
    • 你的答案有太多不相关的信息,包括异步读取和隔离存储,这与从响应中读取 cookie 无关
    猜你喜欢
    • 2012-08-10
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多