我想開一個登錄頁面,就像www.site.com/login.php打開登錄頁面,插入的登錄信息,然後單擊loginbutton
插入用戶名和密碼
和登錄按鈕來調用。
所有這一切都應該在progroamlly(不是在一個瀏覽器)
的服務器做的是有可能這樣做thsi?
我想開一個登錄頁面,就像www.site.com/login.php打開登錄頁面,插入的登錄信息,然後單擊loginbutton
插入用戶名和密碼
和登錄按鈕來調用。
所有這一切都應該在progroamlly(不是在一個瀏覽器)
的服務器做的是有可能這樣做thsi?
你必須保持之間的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。
您可以對登錄按鈕提交的任何位置執行POST請求。 只需在請求中傳遞用戶名和密碼即可。
每次登錄頁面往往都是這種格式:
<form action="login.extention" method="post or get">
<input name="username" type="text" />
<input name="password" type="password" />
</form>
您必須獲取或郵寄您的信息的操作頁面(通常是POST)
我也做了同樣的小項目
我添加超鏈接在.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();
}
希望它能幫到你
這樣做的目的是讓ASP.NET站點自動登錄到另一個基於PHP的站點? – tjrobinson 2011-05-20 09:48:15
是的,如果可能的話,我想在登錄後下載文件。 – Ata 2011-05-20 10:06:14