我是一个系统的家伙,目前在做兼职的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的emtextpstext值。此外,请确保您设置的 CookieContainer财产到的一个实例 CookieContainer 。当调用POST回报,这比有可能会用一个cookie,你将不得不发回现场填充更多。只要保持在任何后续CookieContainer实例HttpWebRequest属性设置为CookieContainer以确保cookie被传来传去。

然后你会去的链接指定的页面。

值得关注的也是logincheck javascript函数,但是在看剧本的来源,它什么都不做笔记。

其他提示

要传递的凭据是Windows身份验证。你需要与模仿表单提交的则captrue会话cookie设置响应数据提交后数据ANS使用的cookie为将来的请求

看看这个答案具有代码做到这一点:

与登录该页面的HttpWebRequest

您不能做这种方式;你传递的凭证就可以与基本的身份验证方案中使用(即,其中,在浏览器中,你会得到一个用户名/密码对话框弹出。)你必须模拟数据进入这种形式,赶上登录cookie并使用它。

在NetworkCredential类是真,用于控制常规窗凭证(NTLM,Kerberos的,等等)。

这网站是在Apache上运行PHP的网站,所以我不认为他们使用NTLM或Kerberos。

您想要做的是发布一些表单域的网站,然后让你找回饼干。确保在后续请求你把饼干回站点,所以它知道你已经登录。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top