Как получить HttpWebRequest.AllowAutoRedirect для установки файлов cookie при выполнении GET/POST на странице с исправлением?

Есть ли способ получить объект HttpWebRequest для включения заголовка set-cookie при автоматической перенаправлении на другую страницу с помощью функции AllowAutoRedirect? Мне нужно, чтобы он сохранял информацию о файлах cookie через перенаправления; Я бы предпочел не реализовывать перенаправление себя, если инфраструктура может сделать это для меня. Это должен быть общий запрос, поскольку большинство страниц входа, которые я видел, обычно делают это.

Ответ 1

Я знаю, что для создания отдельных запросов (т.е. разных объектов HttpRequest) работает с кукисами, вам необходимо установить свойство HttpRequest.CookieContainer на обоих запросы к тому же экземпляру CookieContainer. Это может понадобиться и для этого случая.

Ответ 2

Если вы не хотите использовать CookieContainer, следующий код получит доступ к странице, предоставив файл cookie в параметре. Затем он загрузит все файлы cookie, установленные этой страницей, и вернет их как список строк.

Обратите внимание, что для параметра AllowAutoRedirect установлено значение false. Если вы хотите следовать перенаправлению, вытащите этот объект из заголовков HttpWebResponse, а затем вручную создайте другой веб-запрос.

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