मैं बहुत मुश्किल समय की कोशिश कर रहा webclientसी # WebClient लॉगिन accounts.google.com पर
का उपयोग कर रहा सी # WebClient वस्तु का उपयोग कर रहा है निम्न प्राप्त करने के लिए accounts.google.com पर प्रमाणित करने के लिए किया है।
service=oz
dsh=-8355435623354577691
GALX=33xq1Ma_CKI
timeStmp=
secTok=
[email protected]
Passwd=password
signIn=Sign in
PersistentCookie=yes
rmShown=1
अब प्रवेश पृष्ठ लोड होने से पहले मैं डेटा सबमिट जब यह है निम्न हेडर:
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
ठीक
मैं https://accounts.google.com/ServiceLoginAuth?service=oz
यहाँ करने के लिए प्रपत्र फ़ील्ड्स प्रस्तुत करने कर रहा हूँ पोस्ट फ़ील्ड है अब मैं उन हेडर को शामिल करने के लिए वेब क्लाइंट क्लास का उपयोग कैसे करूं?
मैंने webClient_.Headers.Add();
पर प्रयास किया है लेकिन इसका सीमित प्रभाव है और हमेशा लॉगिन पृष्ठ लौटाता है।
नीचे एक कक्षा है जिसका मैं उपयोग करता हूं। किसी भी मदद की सराहना करेंगे।
हो रही प्रवेश पृष्ठ
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);
}
}
अब हो रही प्रपत्र HtmlAgilityPack का उपयोग कर और उन्हें जोड़ने पैरामीटर संग्रह में खेतों
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);
मैं डेटा पोस्ट करने के बाद मैं प्रवेश पृष्ठ के बजाय रीडायरेक्ट या सफलता प्राप्त संदेश।
मैं क्या गलत कर रहा हूं?
मैं इसे काम पर ला सकता हूं, क्या आप नमूना प्रोजेक्ट पोस्ट कर सकते हैं? – Smith