【发布时间】:2023-10-18 02:31:01
【问题描述】:
好的,所以我正在编写一个需要登录网站的程序,希望从中获取一些信息。
他是我的登录密码:
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
现在当我调用登录时,它会返回登录页面的文本,就好像我没有登录一样(可能因为登录会在浏览器中进行重定向) 当我在我感兴趣的页面上调用 PageAt 时,会返回“请登录”页面。
看看 Fiddler2 发生了什么:(其中 XXXX 和 YYYY 分别是 studentNumber 和密码):
//Via firefox
POST https://server2.olcr.uwa.edu.au/olcrstudent/index.jsp HTTP/1.1
Host: server2.olcr.uwa.edu.au
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: https://server2.olcr.uwa.edu.au/olcrstudent/
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
Content-Type: application/x-www-form-urlencoded
Content-Length: 53
v_studentid=XXXX&v_studentpin=YYYY&b3=Login
//From my program:
POST https://server2.olcr.uwa.edu.au/olcrstudent/index.jsp HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: server2.olcr.uwa.edu.au
Content-Length: 53
Expect: 100-continue
Connection: Keep-Alive
v_studentid=XXXX&v_studentpin=YYYY&b3=Login
所以与我看到的最大区别在于我没有发送任何 cookie (我实际上并不完全确定 cookie 是什么,想一想(我会查一下 s>(编辑:完成)))
那么我应该发送 cookie 吗? .net 中的机制是什么? 我应该做一些不同的事情,因为这是 HTTPS 吗?
【问题讨论】:
-
"所以与我看到的最大不同是我没有发送任何 cookie(我实际上并不完全确定 cookie 是什么,想一想(我会看看up))" 先做这个。如果需要,然后回来问一个问题。
-
在...上拼写为“logging”
-
我现在查了一下 cookie 到底是什么(我之前有一个模糊的理解),并且相信我的问题仍然是正确的。
标签: .net cookies f# httpwebrequest fiddler