Facebook 登录问题
Posted
技术标签:
【中文标题】Facebook 登录问题【英文标题】:FaceBook Login Problem 【发布时间】:2010-06-09 09:21:19 【问题描述】:我正在寻找一个从 facebook 搜索中提取信息的应用程序,因此我需要登录 facebook。我已经在 facebook 开发者网站上注册了我的应用程序并获得了 api 密钥和密钥。在我的代码中,当我尝试登录时出现异常。这是我登录 facebook 的代码:
import com.facebook.api.FacebookRestClient;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpState;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpClientParams;
public class FaceLogin
public FaceLogin()
getUserID("username", "password");
private static void getUserID(String email, String password)
String session = null;
try
HttpClient http = new HttpClient();
http.setParams(new HttpClientParams()); //http.getHostConfiguration().setHost("http://www.facebook.com/");
http.setState(new HttpState());
String api_key = "***********some key*************";
String secret = "***********some key*************";
FacebookRestClient client = new FacebookRestClient(api_key, secret);
client.setIsDesktop(true);
String token = client.auth_createToken();
final String loginId = "http://www.facebook.com/login.php";
GetMethod get = new GetMethod(loginId + "?api_key=" + api_key + "&v=1.0&auth_token=" +token);
System.out.println("Get="+get);
http.executeMethod(get);
PostMethod post = new PostMethod(loginId);
post.addParameter(new NameValuePair("api_key", api_key));
post.addParameter(new NameValuePair("v", "1.0"));
post.addParameter(new NameValuePair("auth_token", token));
post.addParameter(new NameValuePair("fbconnect","true"));
post.addParameter(new NameValuePair("return_session","true"));
post.addParameter(new NameValuePair("session_key_only","true"));
post.addParameter(new NameValuePair("req_perms","read_stream,publish_stream"));
post.addParameter(new NameValuePair("lsd","8HYdi"));
post.addParameter(new NameValuePair("locale","en_US"));
post.addParameter(new NameValuePair("persistent","1"));
post.addParameter(new NameValuePair("email", email));
post.addParameter(new NameValuePair("pass", password));
System.out.println("Token ="+token);
int postStatus = http.executeMethod(post);
System.out.println("Response : " + postStatus);
session = client.auth_getSession(token); // Here I am getting error
System.out.println("Session string: " + session);
long userid = client.users_getLoggedInUser();
System.out.println("User Id is : " + userid);
catch (Exception e)
e.printStackTrace();
public static void main(String k[])
FaceLogin facebookLoginObj=new FaceLogin();
我收到以下异常:
org.apache.commons.httpclient.HttpMethodBase 进程响应标头
警告:Cookie 被拒绝:“$Version=0; $域=已删除; $路径=/; $Domain=.facebook.com". Cookie 名称 不能以 $ 开头
响应:200
2010 年 6 月 8 日下午 2:07:36 org.apache.commons.httpclient.HttpMethodBase 进程响应标头
警告:Cookie 被拒绝:“$Version=0; $路径=已删除; $路径=/; $Domain=.facebook.com". Cookie 名称 不能以 $ 开头
Facebook 返回错误代码 100
com.facebook.api.FacebookException: 无效的参数 -v -> 1.0 在 com.facebook.api.FacebookRestClient.callMethod(FacebookRestClient.java:828) - auth_token -> 004e90dc8818d5f0921d1065d24508d3 在 com.facebook.api.FacebookRestClient.callMethod(FacebookRestClient.java:606) - 方法 -> facebook.auth.getSession - call_id -> 1275986256796 - api_key -> f7cb1e48c383ef599da9021fc4dec322 在 com.facebook.api.FacebookRestClient.auth_getSession(FacebookRestClient.java:1891) 在 facebookcrawler.FacebookLogin.getUserID(FacebookLogin.java:81) 在 facebookcrawler.FacebookLogin.( - 信号 -> 9344ec75b74a0a87bcae645046d45da8 FacebookLogin.java:24) 在 facebookcrawler.FaceLogin.main(FaceLogin.java:80)
这可能是创建会话的问题,我在网上搜索了所有解决方案但无法帮助我登录。
如果您能建议我解决此问题的方法,请帮助我。感谢您提出的所有宝贵建议。
【问题讨论】:
【参考方案1】:我是凭直觉来的:
通过阅读你得到的异常,问题似乎是由于一些“格式错误”的 cookie,实际上它说“cookie 名称可能不以 $ 开头”,根据 cookie 就是这种情况RFC2109
我看到您使用的是 Apache HttpClient,它可以自动管理 cookie,并支持各种 cookie 规范(请参阅here)
由于您没有指定任何内容,我怀疑 HttpClient 默认使用符合 RFC2109 的 cookie,也许这些对于 facebook 来说是不合适的。
因此,您可能想在 HttpClient 中尝试不同的CookiePolicy
,看看会发生什么。
附言请仔细检查您在上面复制和粘贴的异常,因为我担心它会泄露您的 api_key
和 auth_token
的值
【讨论】:
以上是关于Facebook 登录问题的主要内容,如果未能解决你的问题,请参考以下文章
Parse - 通过 Facebook 应用程序登录 Facebook
Facebook 登录(网络)看不到通过 facebook 设备应用程序登录的用户