c# - C# 中的 HttpWebRequest 和表单例份验证

标签 c# httpwebrequest forms-authentication

我是一名系统专家,目前正在做兼职网络开发项目,所以对它还很陌生。我正在尝试为 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 property HttpWebRequest class到用户名/密码/域信息,它应该可以工作。

但是,听起来您必须在网站上输入用户名/密码,这意味着您必须先登录该网站。查看主页,这是我在 <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并发布 emtextpstext值。另外,确保设置了 CookieContainer property CookieContainer 的实例.当对 POST 的调用返回时,它很可能会填充一个 cookie,您必须将其发送回站点。只需继续设置 CookieContainer任何后续的属性(property) HttpWebRequest CookieContainer 的实例以确保 cookie 被传递。

然后您将转到链接中指示的页面。

同样值得关注的是logincheck javascript 函数,但查看脚本源代码,它没有做任何值得注意的事情。

关于c# - C# 中的 HttpWebRequest 和表单例份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/640116/

相关文章:

c# - 将 HTML 动态添加到 ASP.NET 页面

C# HttpWebRequest - 使用 Gzip 压缩

asp.net - 检测处理程序中的身份验证超时并将整个页面重定向到登录页面

asp.net - FormsAuthentication.Initialize() 的作用是什么?

c# - Windows 8.1 中 Pivot Control 的替代方案是什么?

c# - Array 如何使用 LINQ 扩展方法,因为 Array 没有实现 IEnumerable<T> 接口(interface)

c# - 如何表示整数无穷大?

c# - WPF 上的 PCL HttpWebRequest 用户代理

asp.net - 从 ssl webservice 获取请求流时,从传输流中收到意外的 EOF 或 0 字节

asp.net - 手动更新表单例份验证票 :