Хорошо, поэтому я пишу программу, которая должна войти на веб-сайт, хочу получить из нее некоторую информацию.
Он мой код для входа в систему:
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 - это номер студента и пароль соответственно):
//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
Так что большое отличие от моего взгляда в том, что я не отправляю куки (На самом деле я не совсем уверен, что такое куки, если подумать (я посмотрю это * 1012) * (EDIT: Готово)))
Так я должен отправлять куки?
Каковы механизмы для этого в .net?
Должен ли я делать что-то другое, потому что это HTTPS?