6

我正在尝试通过这样做来检索 facebook 用户令牌。我知道它可以在 python 中完成。

    public string GetToken(string Username, string Password)
    {
        wb.DownloadData("https://login.facebook.com/login.php?login_attempt=1");
        var data = new NameValueCollection();
        data["email"] = UserName;
        data["pass"] = Password;
        byte[] responsebytes = wb.UploadValues("https://login.facebook.com/login.php?login_attempt=1", "POST", data);
       string responsebody = Encoding.UTF8.GetString(wb.("https://www.facebook.com/dialog/oauth?client_id=282892925078054&redirect_uri=https://www.facebook.com/&response_type=token"));
        Console.WriteLine(responsebody);

        return responsebody;
    }

但它没有返回令牌。我知道这是可以做到的,因为我已经在 python 中看到了这一点。还有一种简单的方法可以从这里获取用户标识吗?

编辑:

这就是它在python中的完成方式:

def get_token(self, username, password):
    self.session.get("https://login.facebook.com/login.php?login_attempt=1")
    self.session.post("https://login.facebook.com/login.php?login_attempt=1", data={'email': username, 'pass': password})    
    return self.session.get("https://www.facebook.com/dialog/oauth?client_id=282892925078054&redirect_uri=https://www.facebook.com/&response_type=token").url.split("=")[1].split("&")[0]

好的,我已经走到了这一步。

        //Login to facebook.
        string formUrl = "https://login.facebook.com/login.php?login_attempt=1"; // NOTE: This is the URL the form POSTs to, not the URL of the form (you can find this in the "action" attribute of the HTML's form tag
        string formParams = string.Format("email_address={0}&password={1}", email, pass);
        string cookieHeader;
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(formUrl);
        req.ContentType = "application/x-www-form-urlencoded";
        req.Method = "POST";
        byte[] bytes = Encoding.ASCII.GetBytes(formParams);
        req.ContentLength = bytes.Length;
        using (Stream os = req.GetRequestStream())
        {
            os.Write(bytes, 0, bytes.Length);
        }
        WebResponse resp = req.GetResponse();
        cookieHeader = resp.Headers["Set-cookie"];
        Console.WriteLine(cookieHeader);
        Console.WriteLine();
        //Get token
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://www.facebook.com/dialog/oauth?client_id=282892925078054&redirect_uri=https://www.facebook.com/&response_type=token");
        webRequest.Headers.Add("Cookie", cookieHeader);
        //webRequest.AllowAutoRedirect = false;
        HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
        string redirectUrl = response.Headers.Get("Location");

        Console.WriteLine(redirectUrl);

但它没有给我正确的 URL。我究竟做错了什么?

编辑:我试过 AllowautoRedirect true/false。使用 false 它返回此 URL。 https://www.facebook.com/login.php?api_key=282892925078054&skip_api_login=1&display=page&cancel_url=https%3A%2F%2Fwww.facebook.com%2F%3Ferror_reason%3Duser_denied%26error%3Daccess_denied%26error_description%3DThe%2Buser% 2Bdenied%2Byour%2Brequest.&fbconnect=1&next=https%3A%2F%2Fwww.facebook.com%2Fdialog%2Fpermissions.request%3F_path%3Dpermissions.request%26app_id%3D282892925078054%26client_id%3D282892925078054%26redirect_uri%3Dhttps%26redirect_uri%3D 252Fwww.facebook.com%252F%26display%3Dpage%26response_type%3Dtoken%26fbconnect%3D1%26from_login%3D1&rcount=1

我期待这样的事情:

https://www.facebook.com/#access_token=BAAEBSiRPCiYBAH0yF1cmZB14RBs9ZBvN7xQJaDvZAxd29WZCAZCpZAVzHXONNlUd9MOZAsTcSUimW7GITwrvN3px1XJSZBvK3wATdLzlQVOqQmlpBfs0ZCpsfydQV4ZCJEmpk4lmh9JCKbli78IDozYZBONxVszFZACQAgL2WPXF7680NGDQtD2IHl0oj6xbfqAtqpURSdJJmoZBXZAQZDZD&expires_in=5822

谢谢

4

2 回答 2

0

除非你想自己重写这个库,否则你可以使用 Facebook C# SDK,这就是注册你的 appKey 和 appId。

看看:https ://github.com/facebook-csharp-sdk/facebook-winclient-sdk

和例子: http: //facebooksdk.net/docs/web/permissions/

于 2015-07-22T10:22:09.320 回答
0
CallbackManager callbackManager;



 protected void onCreate(Bundle savedInstanceState) 
{



 FacebookSdk.sdkInitialize(getApplicationContext());



  callbackManager  = CallbackManager.Factory.create();



  facebookLogin = (LoginButton) findViewById(R.id.login_button);


  facebookLogin.setReadPermissions("user_friends");



   LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback<LoginResult>()



 {



            @Override

            public void onSuccess(LoginResult loginResult) {

                Log.d("Access Token" ,loginResult.getAccessToken().getToken());

               //here you get you access token

            }

            @Override

            public void onCancel() {

                Log.d("Cancel" ,"On cancel");

            }

            @Override

            public void onError(FacebookException e)
 {
                Log.d("Error","Error");

            }
        });


  //Must set this on activity result

  @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data)
 {

        super.onActivityResult(requestCode, resultCode, data);

        callbackManager.onActivityResult(requestCode, resultCode, data);

    }
于 2015-07-22T10:36:54.823 回答