FSharpData Http.RequestString не обрабатывает "Set-Cookie" в заголовке ответа?

Обновление: я обнаружил, что проблема вызвана строкой 810 в Http.fs.

let cookies = Map.ofList [ for cookie in cookieContainer.GetCookies uri |> Seq.cast<Cookie> -> cookie.Name, cookie.Value ]  

Ури начинается с https, Однако печенье ObFormLoginCookie был добавлен с доменом, запущенным с http потому что нет secure в печенье. Если запросы https не должны использовать все файлы cookie (включая те, домен которых не https)?


Ниже приведен тестируемый код для двух запросов на веб-сайте.

open FSharp.Data.HttpRequestHeaders
open System.Configuration
open System.Net
open FSharp.Data
open System
open System.Web
open System.Reflection

let headers = [ 
    UserAgent ConfigurationManager.AppSettings.["UserAgent"]
    Accept "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" 
    KeepAlive "true"
    ]
let customized (req : HttpWebRequest) = 
    //req.Proxy <- WebProxy(ConfigurationManager.AppSettings.["Proxy"], true)
    req.AllowAutoRedirect <- false
    req
let cc = CookieContainer()

let printCc (cc:CookieContainer) =
    let cs = cc.GetType().InvokeMember("m_domainTable", BindingFlags.NonPublic ||| BindingFlags.GetField ||| BindingFlags.Instance, null, cc, [||]) :?> System.Collections.Hashtable
    for x in cs.Keys do 
        let s = string x
        let x = if s.StartsWith(".") then s.Substring(1, s.Length - 1) else s
        let cookie = cc.GetCookies(new Uri(sprintf "https://%s/" x))
        printfn "%s:" s
        for y in cookie do
            printfn "Name=%s; Value=%s; Domain=%s" y.Name (sprintf "%s..." (y.Value.Substring(0, 7))) y.Domain
        printfn ""
    printfn "-------------"

let url = "https://usbtrustgateway.usbank.com/portal/login.do"
let h1 = Http.RequestString(url, httpMethod = "GET", cookieContainer = cc, headers = headers, customizeHttpRequest = customized)
printfn "Url: %s\n" url
printCc cc
let url = "https://usbtrustgateway.usbank.com/portal/"
let h2 = Http.RequestString(url, httpMethod = "GET", cookieContainer = cc, headers = headers, customizeHttpRequest = customized)
printfn "Url: %s\n" url
printCc cc

Ниже показаны действительные исходные тела ответов, если вы используете fiddler или настроили system.diagnostics в файле конфигурации.

Первый запрос:

{
Прагма: приватная, без кеша
Язык контента: en-US
Длина контента: 0
Cache-Control: приватный, без кеша, без хранилища, max-age = 0
Тип контента: текст / HTML
Истекает: четверг, 01 января 1970 года, 00:00:00 по Гринвичу
Расположение: https://usbtrustgateway.usbank.com/portal/
Сервер: 
X-Powered-By: Servlet/3.0,ASP.NET
X-Frame-Options: SAMEORIGIN
Дата: пт, 29 мая 2015 22:05:40 GMT
Подключение: keep-alive
Set-Cookie: ObSSOCookie= J%2BD73a9JpTHVgo%2FmepgXoObiJZQjqGiFvHhl6Iak9Khzk64RVjXFMDKvqo3wVbKV2MFOs2iHKTy5RxfoSKt4P3OpO8UIM8j6XLZZeKKLUjtL%2FlbKNj%2FwJx13pBBDKwe9X2pU%2FtSjY%2BcfnUy%2B%2B6gJ%2Bab1XW%2B9mQrcw%2FycBNa8kaTYPgU1isboEuSLh3DL6UBTjQbQhEBAvAFr9LlIF46kmzsHXQJFVvb2XsqKsaVIRNJ14EY%2BQgh3vgIEzYV8qW%2FjoidjR7S2tthfn%2BOlKli3w3owoQfcLGKj03H%2FHco6qBtoy8gGJambhE0HMGbuBsQvsNuUftwvYqeKzkUaHIiAm%2FUZh2KppsSvDtk3zdlwJS7Y%2FT1m9t7cj6nUv7Ld%2Bllp; обеспечение; HttpOnly; Путь =/; домен =.usbank.com,JSESSIONID_TGP=0000_qOg8VF7q5KeUVSHce9FCPX:-1; Path=/; HttpOnly,AidLoginSetup=readyToLogin,usbtrustgateway=!PZhxyd/9XT6sqGcZkYV27O1F5Kg1NlFKahd7AKax4J5mzSI...}

Второй запрос (обратите внимание, что Set-Cookie: ObFormLoginCookie возвращается):

{
X-Frame-Options: SAMEORIGIN
Подключение: keep-alive
Длина контента: 0
Дата: пт, 29 мая 2015 22:05:40 GMT
Расположение: /portal/login.do
Набор файлов cookie: ObFormLoginCookie=wh%3Dusbtrustgateway.usbank.com%20wu%3D%2Fportal%2F%20wo%3D1%20rh%3Dhttps%3A%2F%2Fusbtrustgateway.usbank.com%20ru%3D%252Fportal%252F; путь = / доступ / Oblix/ приложение / WebGate/ бен /webgate.dll
Сервер: 
X-Powered-By: ASP.NET
}

Однако вывод программы отображается следующим образом. Это показывает, что Set-Cookie ObFormLoginCookie не был сохранен в контейнере cookie?

URL: https://usbtrustgateway.usbank.com/portal/login.do

.usbank.com: Имя =ObSSOCookie; Значение =RzHAZfS...; Домен =.usbank.com.usbtrustgateway.usbank.com: Имя =JSESSIONID_TGP; Значение = 0000yOl...; Домен = usbtrustgateway.usbank.com Имя = usbtrustgateway; Значение = 4iZ5aX...!; Домен = usbtrustgateway.usbank.com Имя =JSESSIONID_TGP; Значение = 0000yOl...; Домен = usbtrustgateway.usbank.com Имя =AidLoginSetup; Значение =readyTo...; Домен = usbtrustgateway.usbank.com Имя = usbtrustgateway; Значение = 4iZ5aX...!; Домен = usbtrustgateway.usbank.com Имя =ObSSOCookie; Значение =RzHAZfS...; Домен =.usbank.com usbtrustgateway.usbank.com: Имя =JSESSIONID_TGP; Значение = 0000yOl...; Домен = usbtrustgateway.usbank.com Имя = usbtrustgateway; Значение = 4iZ5aX...!; Домен = usbtrustgateway.usbank.com Имя =JSESSIONID_TGP; Значение = 0000yOl...; Домен = usbtrustgateway.usbank.com Имя =AidLoginSetup; Значение =readyTo...; Домен = usbtrustgateway.usbank.com Имя = usbtrustgateway; Значение = 4iZ5aX...!; Домен = usbtrustgateway.usbank.com Имя =ObSSOCookie; Значение =RzHAZfS...; Домен =.usbank.com

-------------
URL: https://usbtrustgateway.usbank.com/portal/

.usbank.com: Имя =ObSSOCookie; Значение =RzHAZfS...; Домен =.usbank.com.usbtrustgateway.usbank.com: Имя =JSESSIONID_TGP; Значение = 0000yOl...; Домен = usbtrustgateway.usbank.com Имя = usbtrustgateway; Значение = 4iZ5aX...!; Домен = usbtrustgateway.usbank.com Имя =JSESSIONID_TGP; Значение = 0000yOl...; Домен = usbtrustgateway.usbank.com Имя =AidLoginSetup; Значение =readyTo...; Домен = usbtrustgateway.usbank.com Имя = usbtrustgateway; Значение = 4iZ5aX...!; Домен = usbtrustgateway.usbank.com Имя =ObSSOCookie; Значение =RzHAZfS...; Домен =.usbank.com usbtrustgateway.usbank.com: Имя =JSESSIONID_TGP; Значение = 0000yOl...; Домен = usbtrustgateway.usbank.com Имя = usbtrustgateway; Значение = 4iZ5aX...!; Домен = usbtrustgateway.usbank.com Имя =JSESSIONID_TGP; Значение = 0000yOl...; Домен = usbtrustgateway.usbank.com Имя =AidLoginSetup; Значение =readyTo...; Домен = usbtrustgateway.usbank.com Имя = usbtrustgateway; Значение = 4iZ5aX...!; Домен = usbtrustgateway.usbank.com Имя =ObSSOCookie; Значение =RzHAZfS...; Домен =.usbank.com -------------

0 ответов

Другие вопросы по тегам