2017-06-27 1 views
0

essaie de se connecter à mon application Web en utilisant facebook, il travaillait Okey jusqu'à récemment, je commencé à obtenir cette erreurEnvoyer JSON chaîne de requête

java.net.URISyntaxException: Illegal character in query at index 43: https://graph.facebook.com/me?access_token={"access_token":"E","token_type":"bearer"} 

essaie de le résoudre en utilisant le dessous

public static void main(String[] args) { 
     String accessToken = "{\"access_token\":\"E\",\"token_type\":\"bearer\"}"; 
     try { 

      //String urlStr = "https://graph.facebook.com/me?access_token=" + URLEncoder.encode(accessToken,"UTF-8"); 
      String urlStr = "https://graph.facebook.com/me?access_token=" +accessToken; 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpGet httpget = new HttpGet(urlStr); 
      httpget.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); 
      ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
      String responseBody = httpclient.execute(httpget, responseHandler); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

également essayé d'utiliser après la demande

public static void main(String[] args) { 
     String accessToken = "{\"access_token\":\"E\",\"token_type\":\"bearer\"}"; 
     try { 

      //String urlStr = "https://graph.facebook.com/me?access_token=" + URLEncoder.encode(accessToken,"UTF-8"); 
      String urlStr = "https://graph.facebook.com/me"; 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httpget = new HttpPost(urlStr); 
      httpget.setEntity(new StringEntity("access_token="+accessToken)); 
      ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
      String responseBody = httpclient.execute(httpget, responseHandler); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

Mais il produit l'exception ci-dessous

org.apache.http.client.HttpResponseException: Bad Request 
    at org.apache.http.impl.client.AbstractResponseHandler.handleResponse(AbstractResponseHandler.java:69) 
    at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:65) 
    at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:51) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:222) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:164) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:139) 
    at com.simsarak.servlet.facebook.FacebookLogin.main(FacebookLogin.java:178) 

a essayé d'utiliser les URLEncoder et la mise en-têtes à application/json mais ne fonctionne toujours pas, Quel pourrait être le problème?

+1

Pourquoi ne vous le mettre dans la demande corps?? – xenteros

+0

produit une mauvaise requête, essayé avec une combinaison différente d'en-têtes et d'encodage –

+0

Où exactement est-il défaillant? Que diriez-vous de présenter la trace de la pile qui va avec cette exception? –

Répondre

0

trouvé le problème, il semble que je dois maintenant extraire uniquement le jeton d'accès du JSON et l'envoyer seul, je l'ai déjà fait par

private String getUserMailAddressFromJsonResponse(String accessToken, HttpSession httpSession) { 

     HttpClient httpclient = new DefaultHttpClient(); 
     JSONParser parser = new JSONParser(); 
     JSONObject json = null; 
     try { 

      if (accessToken != null && !"".equals(accessToken)) { 
       json = (JSONObject) parser.parse(accessToken); 
       String newUrl = "https://graph.facebook.com/me?access_token=" + json.get("access_token"); 
       httpclient = new DefaultHttpClient(); 
       HttpGet httpget = new HttpGet(newUrl); 
       ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
       String responseBody = httpclient.execute(httpget, responseHandler); 
...