tengo tiempo muy difícil intentar autenticar a accounts.google.com usando webclientC# WebClient entrada a accounts.google.com
estoy usando C# WebClient objeto de lograr siguiente.
que estoy presentando campos de formulario a https://accounts.google.com/ServiceLoginAuth?service=oz
Aquí es POST campos:
service=oz
dsh=-8355435623354577691
GALX=33xq1Ma_CKI
timeStmp=
secTok=
[email protected]
Passwd=password
signIn=Sign in
PersistentCookie=yes
rmShown=1
Ahora, cuando carga la página de inicio de sesión antes de presentar datos que tiene encabezados siguientes:
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 ahora, ¿cómo uso WebClient Class para incluir esos encabezados?
He intentado webClient_.Headers.Add();
pero tiene un efecto limitado y siempre devuelve la página de inicio de sesión.
A continuación se muestra una clase que yo uso. Agradecería cualquier ayuda.
Obtención de la página de inicio de sesión
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);
}
}
ahora conseguir campos de formulario utilizando HtmlAgilityPack y añadirlas a la colección Parámetros
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);
Después de publicar los datos que reciben la página de inicio de sesión en lugar de redirigir o el éxito mensaje.
¿Qué estoy haciendo mal?
puedo hacer que esto funcione, ¿puedes publicar un proyecto de muestra? – Smith