2010-06-09 6 views
0

Je vais pour une application qui extrait des informations de la recherche facebook, d'où j'ai besoin de se connecter à facebook. J'ai enregistré mon application dans le site des développeurs de facebook et j'ai la clé api et la clé secrète. dans mon code je reçois une exception quand j'essaye de me connecter. Voici mon code pour se connecter à facebook:FaceBook Connexion Problème

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(); 
} 
} 

Je reçois l'exception suivante:

org.apache.commons.httpclient.HttpMethodBase processResponseHeaders

AVERTISSEMENT: Cookie rejeté: " $ Version = 0; $ Domain = supprimé; $ Path = /; $ Domain = .facebook.com ". Le nom de cookie ne peut pas commencer par

$

Réponse: 200

8 juin 2010 14:07:36 org.apache.commons.httpclient.HttpMethodBase processResponseHeaders

AVERTISSEMENT: Cookie rejeté: "$ Version = 0; $ Chemin = supprimé; $ Chemin = /; $ Domaine = .facebook.com". Le nom de cookie ne peut pas commencer par

$

Facebook renvoie le code d'erreur 100

com.facebook.api.FacebookException: Paramètre non valide - v -> 1,0 à com.facebook.api.FacebookRestClient.callMethod (FacebookRestClient.java:828) - auth_token -> 004e90dc8818d5f0921d1065d24508d3 à com.facebook.api.FacebookRestClient.callMethod (FacebookRestClient.java:606) - méthode -> 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 ( - sig -> 9344ec75b74a0a87bcae645046d45da8 FacebookLogin.java: 24) à facebookcrawler.FaceLogin.main (FaceLogin.java:80)

peut être ici le problème est pour la création de session, je recherchais toutes les solutions sur net, mais je ne pouvais pas aidé à obtenir la connexion.

S'il vous plaît aidez-moi si vous pouvez me suggérer un moyen de résoudre ce problème. Je remercie toutes vos précieuses suggestions.

Répondre

0

Je vais par intuition ici:

  • en lisant l'exception que vous obtenez, il semble que le problème est dû à une « malformé » cookie, en fait, il dit « Nom du cookie ne peut pas commencer par $ », ce qui est le cas pour les cookies selon RFC2109

  • Je vois que vous utilisez Apache HttpClient, qui fait la gestion automatique des cookies, et prend en charge les différentes spécifications des cookies (voir here)

  • puisque vous n'avez rien spécifié, je suppose que HttpClient utilise par défaut les cookies compatibles RFC2109, et peut-être que ceux-ci ne sont pas OK pour facebook.

Ainsi, vous voudrez peut-être essayer un CookiePolicy différent HttpClient, et de voir ce qui se passe.

p.s. s'il vous plaît vérifiez l'exception que vous avez copiée et collée ci-dessus, car je crains que cela révèle la valeur de votre api_key et auth_token