Tôi có thời gian rất khó khăn để cố gắng xác thực với accounts.google.com bằng cách sử dụng webclientC# WebClient đăng nhập vào accounts.google.com
Tôi đang sử dụng đối tượng C# WebClient để đạt được sau đây.
Tôi nộp trường biểu mẫu để https://accounts.google.com/ServiceLoginAuth?service=oz
Đây là POST Fields:
service=oz
dsh=-8355435623354577691
GALX=33xq1Ma_CKI
timeStmp=
secTok=
[email protected]
Passwd=password
signIn=Sign in
PersistentCookie=yes
rmShown=1
Bây giờ khi trang đăng nhập tải trọng trước khi tôi gửi dữ liệu nó có tiêu đề sau:
Content-Type text/html; charset=UTF-8
Strict-Transport-Security max-age=2592000; includeSubDomains
Set-Cookie GAPS=1:QClFh_dKle5DhcdGwmU3m6FiPqPoqw:SqdLB2u4P2oGjt_x;Path=/;Expires=Sat, 21-Dec-2013 07:31:40 GMT;Secure;HttpOnly
Cache-Control no-cache, no-store
Pragma no-cache
Expires Mon, 01-Jan-1990 00:00:00 GMT
X-Frame-Options Deny
X-Auto-Login realm=com.google&args=service%3Doz%26continue%3Dhttps%253A%252F%252Faccounts.google.com%252FManageAccount
Content-Encoding gzip
Transfer-Encoding chunked
Date Thu, 22 Dec 2011 07:31:40 GMT
X-Content-Type-Options nosniff
X-XSS-Protection 1; mode=block
Server GSE
OK bây giờ làm cách nào để sử dụng Lớp WebClient để bao gồm các tiêu đề đó?
Tôi đã thử webClient_.Headers.Add();
nhưng nó có tác dụng hạn chế và luôn trả về trang đăng nhập.
Dưới đây là lớp tôi sử dụng. Sẽ đánh giá cao sự giúp đỡ nào.
Bắt trang đăng nhập
public void LoginPageRequest(Account acc)
{
var rparams = new RequestParams();
rparams.URL = @"https://accounts.google.com/ServiceLoginAuth?service=oz";
rparams.RequestName = "LoginPage";
rparams.Account = acc;
webClient_.DownloadDataAsync(new Uri(rparams.URL), rparams);
}
void webClient__DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
RequestParams rparams = (RequestParams)e.UserState;
if (rparams.RequestName == "LoginPage")
{
ParseLoginRequest(e.Result, e.UserState);
}
}
Bây giờ nhận được các lĩnh vực hình thức sử dụng HtmlAgilityPack và thêm chúng vào bộ sưu tập thông số
public void ParseLoginRequest(byte[] data, object UserState)
{
RequestParams rparams = (RequestParams)UserState;
rparams.ClearParams();
ASCIIEncoding encoder = new ASCIIEncoding();
string html = encoder.GetString(data);
HtmlNode.ElementsFlags.Remove("form");
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
HtmlNode form = doc.GetElementbyId("gaia_loginform");
rparams.URL = form.GetAttributeValue("action", string.Empty);
rparams.RequestName = "LoginPost";
var inputs = form.Descendants("input");
foreach (var element in inputs)
{
string name = element.GetAttributeValue("name", "undefined");
string value = element.GetAttributeValue("value", "");
if (!name.Equals("undefined")) {
if (name.ToLower().Equals("email"))
{
value = rparams.Account.Email;
}
else if (name.ToLower().Equals("passwd"))
{
value = rparams.Account.Password;
}
rparams.AddParam(name,value);
Console.WriteLine(name + "-" + value);
}
}
webClient_.UploadValuesAsync(new Uri(rparams.URL),"POST", rparams.GetParams,rparams);
Sau khi tôi gửi dữ liệu tôi có được trang đăng nhập chứ không phải chuyển hướng hoặc thành công thông điệp.
Tôi đang làm gì sai?
tôi có thể làm việc này, bạn có thể đăng dự án mẫu không? – Smith