如何在Redrected页面上进行GET / POST时,让HttpWebRequest.AllowAutoRedirect设置cookie?

时间:2009-04-21 23:02:57

标签: c# cookies redirect httpwebrequest

有没有办法让HttpWebRequest对象在通过AllowAutoRedirect功能自动重定向到另一个页面时考虑到set-cookie标头?我需要它来维护重定向的cookie信息;如果框架可以为我做这个,我宁愿不必自己实现重定向。这必须是一个常见的请求,因为我见过的大多数登录页面通常会这样做。

2 个答案:

答案 0 :(得分:5)

我知道要让单独的请求(即不同的HttpRequest对象)使用cookie,您需要在HttpRequest.CookieContainer的同一个实例的两个请求上设置CookieContainer属性。对于这种情况,您可能也需要这样做。

答案 1 :(得分:0)

如果您不想使用CookieContainer,以下代码将访问页面,在参数中提供cookie。然后,它将下载该页面设置的所有cookie并将其作为字符串列表返回。

请注意,AllowAutoRedirect设置为false。如果要跟随重定向,请将该对象从HttpWebResponse标头中拉出,然后手动构建另一个Web请求。

Public Shared Function GetCookiesSetByPage(ByVal strUrl As String, ByVal cookieToProvide As String) As IEnumerable(Of String)

    Dim req As System.Net.HttpWebRequest
    Dim res As System.Net.HttpWebResponse
    Dim sr As System.IO.StreamReader

    '--notice that the instance is created using webrequest 
    '--this is what microsoft recomends 
    req = System.Net.WebRequest.Create(strUrl)

    'set the standard header information 
    req.Accept = "*/*"
    req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
    req.ContentType = "application/x-www-form-urlencoded"
    req.AllowAutoRedirect = False
    req.Headers.Add(HttpRequestHeader.Cookie, cookieToProvide)
    res = req.GetResponse()

    'read in the page 
    sr = New System.IO.StreamReader(res.GetResponseStream())
    Dim strResponse As String = sr.ReadToEnd

    'Get the cooking from teh response
    Dim strCookie As String = res.Headers(System.Net.HttpResponseHeader.SetCookie)
    Dim strRedirectLocation As String = res.Headers(System.Net.HttpResponseHeader.Location)
    Dim result As New List(Of String)
    If Not strCookie = Nothing Then
        result.Add(strCookie)
    End If
    result.Add(strRedirectLocation)
    Return result
End Function