gpt4 book ai didi

c# - 用于登录 ASP.NET 网站的控制台应用程序

转载 作者:太空狗 更新时间:2023-10-29 21:45:41 24 4
gpt4 key购买 nike

首先,请原谅我对这个问题的幼稚。我是一名退休的程序员,在 DOS 出现之前就开始了。我不是 ASP.NET 方面的专家。我需要知道的部分是我需要知道的。 (如果你跟着我...)

所以我想登录一个网站并抓取一些内容。使用记事本和 fiddler2 查看 HTML 源代码后,我很清楚该站点是使用 ASP.NET 技术实现的。

我首先进行了大量的谷歌搜索,并阅读了所有我能找到的关于用 C# 编写屏幕抓取工具的内容。经过一些调查和多次尝试,我想我得出的结论是这并不容易。

问题的症结(正如我现在所看到的)是 ASP 为程序员提供了很多维护状态的方法。 Cookies、viewstate、session vars、page vars、get 和 post 参数等。另外,程序员可以在服务器和客户端脚本之间分配工作。 IE、Safari、Chrome 或 Firefox 等丰富的 Web 客户端知道如何处理程序员编写的任何内容(以及 ASP 框架在幕后实现)。

WebClient 不是富网络客户端。它甚至不知道如何实现 cookie。

所以我陷入了僵局。一种方法是尝试对 ASP 应用程序期望的富客户端的所有功能进行逆向工程,并编写类固醇类的 WebClient 以充分模仿富客户端以登录。

或者我可以尝试将 IE(或其他一些富客户端)嵌入到我的应用程序中,并希望公开的界面足够丰富,以便我可以通过编程方式填写用户名和密码字段并将表单 POST 回来。 (并访问响应流,以便我可以解析 HTML 以抓取我想要的数据...)

或者我可以寻找一些比 WebClient 更丰富的第 3 方控件。

任何人都可以敏锐地洞察我应该关注的地方吗?

这既是一个学习经验,也是一个项目。也就是说,我真的很想从目标站点自动登录和信息检索。

最佳答案

这是我用来登录网站并获取我的 cookie 的示例函数

string loginSite(string url, string username, string password)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
string cookie = "";

//this values will change depending on the website
string values = "vb_login_username=" + username + "&vb_login_password=" + password
+ "&securitytoken=guest&"
+ "cookieuser=checked&"
+ "do=login";
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = values.Length;
CookieContainer a = new CookieContainer();
req.CookieContainer = a;
System.Net.ServicePointManager.Expect100Continue = false; // prevents 417 error
using (StreamWriter writer = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII)) { writer.Write(values); }
HttpWebResponse c = (HttpWebResponse)req.GetResponse();
Stream ResponseStream = c.GetResponseStream();
StreamReader LeerResult = new StreamReader(ResponseStream);
string Source = LeerResult.ReadToEnd();


foreach (Cookie cook in c.Cookies) { cookie = cookie + cook.ToString() + ";"; }
return cookie;
}

这里是一个调用示例:

string Cookie = loginSite("http://theurl.comlogin.php?s=c29cea718f052eae2c6ed105df2b7172&do=login", "user", "passwd");

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.theurl.com");
//once you got the cookie you add it to the header.

req.Headers.Add("cookie", Cookie);
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
using (Stream respStream = response.GetResponseStream())
{
using (StreamReader sr = new StreamReader(respStream))
{
string s = sr.ReadToEnd();
HtmlReturn = s;
// System.Diagnostics.Debugger.Break();
}
}

对于 Firefox,您可以使用扩展 HTTP-Headers 来了解邮寄设置的参数并修改变量值:

 string values = "vb_login_username=" + username + "&vb_login_password=" + password
+ "&securitytoken=guest&"
+ "cookieuser=checked&"
+ "do=login";

与目标网站上的参数匹配。

如果您决定为 Firefox 使用 Live-HTTP-HEaders,当您登录该网站时,您将获得标题中的帖子信息,类似这样的内容:

GET / HTTP/1.1 Host: www.microsoft.com User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive Cookie: WT_FPC=id=82.144.112.152-154450144.30258861:lv=1351580394112:ss=1351575867559; WT_NVR_RU=0=msdn:1=:2=; omniID=0d2276c2_bbdd_4386_a11d_f8da1dbc5489; MUID=349E06C547426937362B02CC434269B9; MC1=GUID=47b2ed8aeea0de4797d3a40cf549dcbb&HASH=8aed&LV=201210&V=4&LU=1351608258765; A=I&I=AxUFAAAAAAALBwAAukh4HjpMmS4eKtKpWV0ljg!!&V=4; msdn=L=en-US

关于c# - 用于登录 ASP.NET 网站的控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13391383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com