我是一名系统专家,目前正在做兼职网络开发项目,所以对它还很陌生。我正在尝试为 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
并发布 emtext
和 pstext
值。另外,确保设置了 CookieContainer
property到 CookieContainer
的实例.当对 POST 的调用返回时,它很可能会填充一个 cookie,您必须将其发送回站点。只需继续设置 CookieContainer
任何后续的属性(property) HttpWebRequest
CookieContainer
的实例以确保 cookie 被传递。
然后您将转到链接中指示的页面。
同样值得关注的是logincheck
javascript 函数,但查看脚本源代码,它没有做任何值得注意的事情。
关于c# - C# 中的 HttpWebRequest 和表单例份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/640116/