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

Mos*_*ndi 5 c# asp.net web-crawler httpwebrequest

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

提前致谢

Las*_*olt 6

将它们作为查询字符串传递的注释仅适用于GET参数.这适用于POST.正如你可以看到我用表格条目username,passwordlogin(按钮),但在你的情况可能是完全不同的值.因此,使用像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);
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)