HttpWebRequest和在C#窗体身份验证
-
11-07-2019 - |
题
我是一个系统的家伙,目前在做兼职的Web开发项目,所以非常新的了。我试图写一个www.portapower.com http客户端。
它会为被公布在网站上,并且如果它们匹配特定需求它将打印的消息的某些项目。
虽然试图访问该页面:
http://www.portapower.com /getbainfo.php?fclasscode=1&code=CB1831B.40H&fbrand=QUNFUg==
在网站重定向我到一个默认的注册页面:
http://www.portapower.com/defaregit.php
下面是我所编码的片段:
CookieContainer myContainer = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)
WebRequest.Create("http://www.portapower.com/" + urlpart);
request.Credentials = new NetworkCredential("****", "******");
request.CookieContainer = myContainer;
request.PreAuthenticate = true;
request.Method = "POST";
HttpWebResponse response = (HttpWebResponse)
request.GetResponse();
Console.WriteLine(response.StatusCode);
Stream resStream = response.GetResponseStream();
Console.WriteLine(resStream.ToString());
我有用户名和密码,并通过浏览器使用时,它工作正常。请告诉我,如果这是一个正确的方式来访问认证页面。
解决方案
这取决于网站是如何验证用户。如果他们使用基本身份验证或Windows身份验证,那么您可以设置的 Credentials
类来的HttpWebRequest
财产用户名/密码/域信息和它应该工作。
然而,这听起来像你要进入的网站,这意味着你将不得不登录到该网站首先在用户名/密码。纵观主网页,这就是我发现在处理登录的<form>
元素:
<form name="formlogin" method="post" action="./defalogin.php" >
<input name="emtext" type="text" id="emtext" size="12">
<input name="pstext" type="password" id="pstext" size="12">
<input type="submit" name="Submit" value="Logn in"
onClick="return logincheck()" >
</form>
我只包括相关部分。
鉴于此,你必须去./defalogin.php
页面先用HttpWebRequest
和POST的emtext
和pstext
值。此外,请确保您设置的 CookieContainer
财产到的一个实例 CookieContainer
。当调用POST回报,这比有可能会用一个cookie,你将不得不发回现场填充更多。只要保持在任何后续CookieContainer
实例HttpWebRequest
属性设置为CookieContainer
以确保cookie被传来传去。
然后你会去的链接指定的页面。
值得关注的也是logincheck
javascript函数,但是在看剧本的来源,它什么都不做笔记。
其他提示
要传递的凭据是Windows身份验证。你需要与模仿表单提交的则captrue会话cookie设置响应数据提交后数据ANS使用的cookie为将来的请求
看看这个答案具有代码做到这一点:
您不能做这种方式;你传递的凭证就可以与基本的身份验证方案中使用(即,其中,在浏览器中,你会得到一个用户名/密码对话框弹出。)你必须模拟数据进入这种形式,赶上登录cookie并使用它。
在NetworkCredential类是真,用于控制常规窗凭证(NTLM,Kerberos的,等等)。
这网站是在Apache上运行PHP的网站,所以我不认为他们使用NTLM或Kerberos。
您想要做的是发布一些表单域的网站,然后让你找回饼干。确保在后续请求你把饼干回站点,所以它知道你已经登录。