我正试图通过这样做来检索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中看到了这一点。 还有一种从这里获取用户ID的简单方法吗?
编辑:
这是在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。我做错了什么?
我期待这样的事情:
https://www.facebook.com/#access_token=BAAEBSiRPCiYBAH0yF1cmZB14RBs9ZBvN7xQJaDvZAxd29WZCAZCpZAVzHXONNlUd9MOZAsTcSUimW7GITwrvN3px1XJSZBvK3wATdLzlQVOqQmlpBfs0ZCpsfydQV4ZCJEmpk4lmh9JCKbli78IDozYZBONxVszFZACQAgL2WPXF7680NGDQtD2IHl0oj6xbfqAtqpURSdJJmoZBXZAQZDZD&expires_in=5822
由于
答案 0 :(得分:0)
除非你想自己重写这个库,否则你可以使用Facebook C#SDK,它就是注册你的appKey和appId。
看看:https://github.com/facebook-csharp-sdk/facebook-winclient-sdk
答案 1 :(得分: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);
}