以编程方式将用户名和密码发布到登录页面

时间:2011-05-03 12:57:14

标签: c# asp.net httpwebrequest web-crawler

我想使用asp.net将用户名和密码发布到远程网站的登录页面并传递它,以访问网站上的登录页面。 换句话说,假设网站上有一个页面,我会浏览它,从中获取一些内容,但在此之前需要登录。 如何调用该登录页面并从asp.net应用程序发布用户名和密码以传递它。

提前致谢

3 个答案:

答案 0 :(得分:6)

将它们作为查询字符串传递的注释仅适用于GET个参数。这适用于POST。如您所见,我使用表单条目usernamepasswordlogin(按钮),但在您的情况下,它可能是完全不同的值。因此,使用Fiddler之类的工具来捕获正常登录发送的值。当我做类似的事情时,我不得不使用支持cookie的webclient,因为该服务使用cookie作为会话值。您尝试访问的服务可能使用查询会话字符串 - 它完全取决于服务。

我在这样做时遇到的另一个问题是我必须从html页面获取会话ID并将其发送以进行记录。我没有在这里包含代码,但是如果你需要的话我会拥有它:)

var client = new CookieAwareWebClient();
client.Encoding = Encoding.UTF8;

// Post values

var values = new NameValueCollection();
values.Add("username", someusername);
values.Add("password", somepassword);
values.Add("login", "Login");   //The button

// Logging in
client.UploadValues(loginPageUrl, values); // You may verify the result. It works with https :)

// Download some secret page

var html= client.DownloadString(someurl);

<强> CookieAwareWebClient

public class CookieAwareWebClient : WebClient
{
    private CookieContainer cookieContainer = new CookieContainer();

    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest request = base.GetWebRequest(address);
        if (request is HttpWebRequest)
        {
            (request as HttpWebRequest).CookieContainer = cookieContainer;
        }
        return request;
    }
}

答案 1 :(得分:3)

尝试阅读本文 - &gt; http://www.terminally-incoherent.com/blog/2008/05/05/send-a-https-post-request-with-c/

如果你使用firefox - 下载“tamper-data”和“live http-headers”以查看传递给登录站点的信息

使用实时http-header,您可以看到在POST中传递了哪些数据

答案 2 :(得分:0)

假设您想要重新访问www.ABC.com

构造类似

的查询字符串
http://abc.com/products.aspx?field1=value1&field2=value2

在另一页上获取此值。但建议使用POST方法,希望这个帮助