2011-05-20 27 views
0

我想開一個登錄頁面,就像www.site.com/login.php打開登錄頁面,插入的登錄信息,然後單擊loginbutton

插入用戶名和密碼

和登錄按鈕來調用。

所有這一切都應該在progroamlly(不是在一個瀏覽器)

的服務器做的是有可能這樣做thsi?

+0

這樣做的目的是讓ASP.NET站點自動登錄到另一個基於PHP的站點? – tjrobinson 2011-05-20 09:48:15

+0

是的,如果可能的話,我想在登錄後下載文件。 – Ata 2011-05-20 10:06:14

回答

0

你必須保持之間的CookieContainer實例。如果你想以登錄用戶的身份觸發請求,登錄POST請求(可能會設置登錄cookie)和進一步請求。

 var cookieJar = new CookieContainer();    
     var loginData = new Dictionary<string,string>() { 
      // be carefull to use the same keys/names as the login form 
      { "username", "LightWing" }, 
      { "password", "l33tPwD" } 
     }; 
     var request = (HttpWebRequest)WebRequest.Create("http://.../login.php"); 
     request.CookieContainer = cookieJar; 
     request.AllowAutoRedirect = true; 
     request.Method = "POST"; 

     // build the POST data 
     byte[] dataBuffer = Encoding.ASCII.GetBytes(string.Join("&", loginData.AllKeys.Select(x => string.Concat(HttpUtility.UrlEncode(x), "=", HttpUtility.UrlEncode(loginData[x]))))); 
     request.ContentLength = dataBuffer.LongLength; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     using (var requestStream = request.GetRequestStream()) 
     { 
      requestStream.Write(dataBuffer, 0, dataBuffer.Length); 
      requestStream.Flush(); 
     } 
     var response = request.GetResponse(); 
     using (var responseStream = response.GetResponseStream()) 
     { 
      // do some reading if you want.. 
     } 

     // now _cookieJar should contain the login cookie... 
     // you can trigger further requests as a logged in user: 
     request = (HttpWebRequest)WebRequest.Create("http://.../restrictedPage.php"); 
     request.CookieContainer = cookieJar; // reuse them cookies! 
     request.AllowAutoRedirect = true; 
     request.Method = "GET"; 
     var response = request.GetResponse(); 
     using (var responseStream = response.GetResponseStream()) 
     { 
      // read the restricted page response 
     } 

我還寫了一個簡單的實用程序,可以幫助您刮取使用回傳的Asp.net WebForms頁面。你可以找到它here

0

您可以對登錄按鈕提交的任何位置執行POST請求。 只需在請求中傳遞用戶名和密碼即可。

0

每次登錄頁面往往都是這種格式:

<form action="login.extention" method="post or get"> 
<input name="username" type="text" /> 
<input name="password" type="password" /> 
</form> 

您必須獲取或郵寄您的信息的操作頁面(通常是POST)

0

我也做了同樣的小項目

我添加超鏈接在.aspx頁面中的一個,點擊它會自動登錄我到外部網站

上的Page_Load後調用下面的代碼

HyperLink1.NavigateUrl = "javascript:__doExternalPost(\"http://www.xyz.com/login.jsp\");"; 

if (Page.IsPostBack == false) 
{ 
     this.Page.ClientScript.RegisterHiddenField("username", USERNAME);               
     this.Page.ClientScript.RegisterHiddenField("password", PASSWORD); 
} 
在.aspx頁面中

添加以下JavaScript

function __doExternalPost(targetUrl) 
{ 
    theForm.__VIEWSTATE.value = ""; 
    theForm.encoding = "application/x-www-form-urlencoded"; 
    theForm.action = targetUrl; 
    theForm.target = "_blank"; 
    theForm.submit(); 
} 

希望它能幫到你