2011-05-03 140 views
5

我想使用asp.net将用户名和密码发布到远程网站的登录页面,并通过它来访问网站上需要登录的页面。 换句话说,假设网站上有一个页面,我会用它来抓取一些东西,但在它之前需要登录。 如何调用该登录页面并发布来自asp.net应用程序的用户名和密码来传递它。以编程方式登录页面的用户名和密码

在此先感谢

+0

后的用户名和密码在查询字符串传递到活页的HTTP报头就可以看到。 – atoMerz 2011-05-03 12:59:40

+4

请不要以纯文本形式进行此操作。你只是在问问题。 – 2011-05-03 13:05:29

回答

6

以将它们作为查询字符串仅适用于GET参数评论。这适用于POST。正如你可以看到我使用表格条目usernamepasswordlogin(按钮),但在你的情况下,它可能是完全不同的值。因此,使用像Fiddler这样的工具来捕获正常登录正在发送的值。当我做了类似的事情时,我不得不使用cookie识别的web客户端,因为服务使用cookies来获取会话值。您尝试访问的服务可能使用查询会话字符串 - 它完全取决于服务。

我这样做时遇到的另一个问题是,我不得不从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; 
    } 
} 
+0

感谢lasseespeholt 但是NameValueColection的那些第一个参数是什么? 是否有控件的名称或标识? 最后一个(values.Add(“login”,“Login”););第一和第二参数? – 2011-05-03 13:48:49

+0

@ user711861您需要找到您自己发送的值。我假设你无法控制该网站(否则这是一个非常糟糕的方式)。我推荐Fiddler,你可以看到发回的值。 'name = login,value = Login'就是我必须发送的一个按钮,所以这个调用就像按下按钮一样。 – 2011-05-04 05:06:22

+0

我明白这是一个旧的评论,但你的代码确实帮了我。但是,再次,如果我尝试在验证之后打开一个链接,它会退出,我该如何将这个html字符串放在cuz后面的代码中。但是,如果我使用您的验证者,即client.DownloadString(..“,那么它显示我登录。 – Ratan 2012-12-04 21:30:07

0

让我们假设你想redriect到www.ABC.com

构建查询字符串等

http://abc.com/products.aspx?field1=value1&field2=value2 

的d在另一页上获取该值。但recomended使用POST方法,希望这有助于

相关问题