首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从C#登录Garmin Connect

从C#登录Garmin Connect
EN

Stack Overflow用户
提问于 2014-03-15 05:47:32
回答 1查看 1.3K关注 0票数 1

我有一个登录GarminConnect.com的代码,但是garmin选择改变他们的登录过程,所以我的代码不再工作了,我不知道如何让它再次工作。

我通常不是在开发web通信应用程序,所以对我来说,如何让它再次工作对我来说没有太大的意义。

这就是我现在所拥有的:

代码语言:javascript
运行
复制
public class SessionService
{
    private const string SignInUrl = @"https://connect.garmin.com/en-US/signin";
    private const string DashboardUrl = @"http://connect.garmin.com/dashboard";

    public Session Session { get; private set; }

    public bool SignIn(string userName, string password)
    {
        try
        {
            Session = new Session();
            GetSignInPage(Session.Cookies);

            var signInResponse = PostSignInRequest(Session.Cookies, userName, password);

            if (IsDashboardUri(signInResponse.ResponseUri))
                return true;
        }
        catch (Exception ex)
        {
            Debug.WriteLine("Error signing in. {0}", ex.Message);
        }

        return false;
    }

    public void SignOut()
    {
        var request = HttpUtils.CreateRequest(BuildSignOutUrl(), Session.Cookies);
        request.GetResponse();
    }

    private static string BuildSignOutUrl()
    {
        var queryString = HttpUtils.CreateQueryString();
        queryString.Add("actionMethod", "page/home/dashboard.xhtml:identity.logout");
        queryString.Add("cid", "");
        return String.Format("{0}?{1}", DashboardUrl, queryString);
    }

    private static void GetSignInPage(CookieContainer cookies)
    {
        var request = HttpUtils.CreateRequest(DashboardUrl, cookies);
        request.GetResponse();
    }

    private static HttpWebResponse PostSignInRequest(CookieContainer cookies, string userName, string password)
    {
        var formBinaryData = BuildSignInFormData(userName, password);

        var request = HttpUtils.CreateRequest(SignInUrl, cookies);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.WriteBinary(formBinaryData);
        return (HttpWebResponse)request.GetResponse();
    }

    private static byte[] BuildSignInFormData(string userName, string password)
    {
        var formParams = HttpUtils.CreateQueryString();
        formParams.Add("login", "login");
        formParams.Add("login:loginUsernameField", userName);
        formParams.Add("login:password", password);
        formParams.Add("login:signInButton", "Sign In");
        formParams.Add("javax.faces.ViewState", "j_id1");
        return Encoding.UTF8.GetBytes(formParams.ToString());
    }

    private static bool IsDashboardUri(Uri uri)
    {
        return uri.ToString().StartsWith(DashboardUrl);
    }
}

我希望有人能给我指出正确的方向,告诉我如何让它工作。

EN

回答 1

Stack Overflow用户

发布于 2014-03-15 08:10:04

Garmin似乎正在通过JS呈现iframe。我怀疑做一个基本的表单post将会处理这个问题,因为Javascript需要运行来构建DOM元素。您应该联系Garmin来使用他们的API。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22416325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档