Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 登录网站时,Cookies是如何涉及的?_.net_Cookies_F#_Httpwebrequest_Fiddler - Fatal编程技术网

.net 登录网站时,Cookies是如何涉及的?

.net 登录网站时,Cookies是如何涉及的?,.net,cookies,f#,httpwebrequest,fiddler,.net,Cookies,F#,Httpwebrequest,Fiddler,好的,我正在写一个程序,需要登录到一个网站,想从中获取一些信息 他是我的登录代码: module Webscraper = open System.Net open HtmlAgilityPack open Lolcr.Model open System.Collections.Specialized let logon = fun (address:string) studentNumber password-> let upl

好的,我正在写一个程序,需要登录到一个网站,想从中获取一些信息

他是我的登录代码:

module Webscraper = 
    open System.Net
    open HtmlAgilityPack
    open Lolcr.Model
    open System.Collections.Specialized

    let logon = fun (address:string) studentNumber password->
        let upload values =
            let wc = new WebClient()
            wc.UploadValues (address, values)
        let ToNameValueCollection nvs =
            let col = new NameValueCollection()
            for nv in nvs do
                match nv with (n, v) -> col.Add(n, v);
            col
        let fields :List<string*string> = 
            ("v_studentid",studentNumber) ::
            ("v_studentpin", password) ::
            ("b3", "Login") :: []
            let resp = fields |> ToNameValueCollection |> upload;
            resp |> Array.map char |> System.String.Concat

//and for viewing a page within the site:
    let pageAt = fun (address : string) ->
        let getWebStream = 
            let req = HttpWebRequest.Create address
            let resp = req.GetResponse()
            resp.GetResponseStream

        let doc = new HtmlDocument()
        getWebStream() |> doc.Load;
        doc.DocumentNode

因此,我看它的最大区别是我没有发送任何cookies(我实际上不完全确定cookies是什么,想想看(我会查一下(编辑:完成)))

我应该送饼干吗? 在.net中,实现这一点的机制是什么?
我应该做些不同的事情吗?因为这是HTTPS?

一般来说,当你登录到一个网站时,你必须有一些方法让网站在你从一页到另一页的过程中进行跟踪

这通常通过cookie或URL中的会话标识符来完成

现在,您需要知道两种cookies之间的区别

一种是会话cookie,它保留在客户端计算机的内存中,然后在您关闭浏览器(或会话关闭)后消失。这些仅包含引用服务器上用户唯一会话实例的唯一标识符。这样,服务器就可以在每次子序列页面点击时知道您是谁

另一种类型的cookie是物理cookie,您专门将其设置为将特定变量保存在客户端计算机上的文本文件中

如果查看您的响应,您有一个会话ID的引用,这意味着您在客户端计算机上确实有一个会话cookie:

Cookie: JSESSIONID=18F87DFEB1555A6FA644215FDAE5E506; __utma=55889711.14817822.1328281214.1328281214.1328281214.1; __utmz=55889711.1328281214.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=olcr%20uwa; __utmb=55889711.1.10.1328281214; __utmc=55889711 

如果您使用会话,默认情况下会在asp.net中创建此cookie。

是的,通常您需要保留cookie才能登录到站点。 CookieAwareWebclient,例如来自以下位置的客户端:, 让它变得简单。 F#等价物是

type CookieAwareWebclient (cookies) = 
    inherit WebClient()
    member this.CookieContainer = cookies

    new () = new CookieAwareWebclient(new CookieContainer())

    override this.GetWebRequest (address:Uri) =
        let req = base.GetWebRequest address
        match req with 
        | :? HttpWebRequest as httpReq -> 
            httpReq.CookieContainer <- this.CookieContainer;
            upcast httpReq
        | _ -> req;
键入CookieAwareWebclient(cookies)=
继承WebClient()
成员this.CookieContainer=cookies
new()=新CookieAwareWebclient(新CookieContainer())
重写this.GetWebRequest(地址:Uri)=
let req=base.GetWebRequest地址
匹配请求
| :? HttpWebRequest作为HttpRequest->
httpReq.CookieContainer请求;
现在,只要您通过相同的Webclient执行所有webrequests(因此您必须使Webclient在整个模块中都可访问,并更改pageAt以使用它)
你会没事的

“所以我看它的最大区别是我没有发送任何cookies(实际上我不完全确定cookies是什么,仔细想想(我会查一下))”先这样做。然后回来问一个问题,如果需要的话。它的拼写是“登录”…我现在已经查到了什么是cookies(我以前有一个模糊的理解),相信我的问题仍然是正确的。这个答案并没有告诉OP如何持久保存cookie以便登录网站。在确保他理解cookie的真正含义后,我指出他已经在他的网站上使用了会话cookie,并且每当使用会话时,.net都会自动创建该cookie。你认为我的回答中缺少什么信息,值得投否决票?1)我没有投否决票。2) 默认情况下,.Net
WebRequest
s没有cookie容器。服务器可能会尝试给您一个会话cookie,但客户端需要持久化它,而OP需要知道如何做。事实上,我编写的是客户端,而不是服务器。我现在就开始工作了,不过还是要感谢你的投入。
type CookieAwareWebclient (cookies) = 
    inherit WebClient()
    member this.CookieContainer = cookies

    new () = new CookieAwareWebclient(new CookieContainer())

    override this.GetWebRequest (address:Uri) =
        let req = base.GetWebRequest address
        match req with 
        | :? HttpWebRequest as httpReq -> 
            httpReq.CookieContainer <- this.CookieContainer;
            upcast httpReq
        | _ -> req;