2017-04-26 228 views
0

我使用下面的curl命令從授權代碼獲取來自instagram api的訪問令牌。將curl命令轉換爲java http客戶端代碼以獲取數據

curl \-F 'client_id=cf07d1a2c69940e59420b6db4c936f4a' \ 
-F 'client_secret=fb0a975ca2024a1592459308df5ead47' \ 
-F 'grant_type=authorization_code' \ 
-F 'redirect_uri=http://localhost:8080/Insta_SMI_M1/accessToken/' \ 
-F 'code=fcf66e5f09bf43a18ab15e5f1e0ae75f' 
\https://api.instagram.com/oauth/access_token/ 

輸出:

{"access_token": "5351945621.cf07d1a.1d35647e22f24ed0885f65545f3f1b0b", "user": {"id": "5351945621", "username": "abhaykumar", "profile_picture": "https://scontent-amt2-1.cdninstagram.com/t51.2885-19/11906329_960233084022564_1448528159_a.jpg", "full_name": "Quantum Four", "bio"} 

捲曲地址:

https://api.instagram.com/oauth/access_token?client_id=cf07d1a2c69940e59420b6db4c936f4a&client_secret=fb0a975ca2024a1592459308df5ead47&grant_type=authorization_code&redirect_uri=http://localhost:8080/Insta_SMI_M1/auth&code=2c5d97c6d6454b8592816d7d39efb935

上述網址既不給予任何錯誤,也不表示而使用在郵遞員或瀏覽器輸出(它的空行)。

以下是相同的代碼。

@RequestMapping(value="/auth", method=RequestMethod.GET) 
public String getAuthCode(HttpServletRequest request, HttpServletResponse response) 
{ 
     String code = request.getParameter("code"); 
     System.out.println("code is: "+ code); 


     String url = "https://api.instagram.com/oauth/access_token?" 
       + "client_id=" + Constants.CLIENT_ID 
       + "&client_secret=" + Constants.CLIENT_SECRET 
       + "&grant_type=authorization_code" 
       + "&redirect_uri=" + Constants.REDIRECT_URI_AUTH 
       + "&code="+code; 

     System.out.println("Access Token URL: "+ url); 
     StringBuffer result = null; 
     try { 
      System.out.println("1"); 
      @SuppressWarnings({ "resource", "deprecation" }) 
      HttpClient client = new DefaultHttpClient(); 
      HttpGet request1 = new HttpGet(url); 
      System.out.println("2"); 

      HttpResponse response1 = client.execute(request1); 
      BufferedReader rd = new BufferedReader(
        new InputStreamReader(response1.getEntity().getContent())); 
       System.out.println("3"); 

      result = new StringBuffer(); 
      String line = ""; 
      while ((line = rd.readLine()) != null) { 
        System.out.println("line " + line); 
       result.append(line); 
        System.out.println("3"); 

      } 
     } catch (UnsupportedOperationException | IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     System.out.println(result.toString()); 
     return result.toString();  
} 

任何機構都可以幫助我嗎? 謝謝

+0

如果網址不郵差正常工作,這是一個跡象,表明有什麼東西不對您的網址。 – betseyb

回答

1

curl正在做一個POST請求,你正在做一個GET請求形式的Java。按照這個示例關於如何製作一個POST request using java(使用http-client)。您可以考慮下面的代碼來設置參數:

params.add(new BasicNameValuePair("client_id", "cf07d1a2c69940e59420b6db4c936f4a")); 
params.add(new BasicNameValuePair("client_secret", "fb0a975ca2024a1592459308df5ead47")); 
+0

謝謝你的提示! (我很需要它,因爲我是java spring web rest api interation的新手) –

0

因爲我din't找到完整的代碼從Instagram的API獲得訪問令牌互聯網上,我會把它下面爲我工作的代碼。

public String accessTkn (String code) 
{ 
    try { 
     HttpClient httpclient = HttpClients.createDefault(); 
     HttpPost httppost = new 
     HttpPost("https://api.instagram.com/oauth/access_token"); 

     // Request parameters and other properties. 
     List<NameValuePair> params = new ArrayList<NameValuePair>(2); 
     params.add(new BasicNameValuePair("client_id", Constants.CLIENT_ID)); 
     params.add(new BasicNameValuePair("client_secret", Constants.CLIENT_SECRET)); 
     params.add(new BasicNameValuePair("grant_type", "authorization_code")); 
     params.add(new BasicNameValuePair("redirect_uri", Constants.REDIRECT_URI_AUTH)); 
     params.add(new BasicNameValuePair("code", code)); 


     httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); 

     //Execute and get the response. 
     HttpResponse response = httpclient.execute(httppost); 
     HttpEntity entity = response.getEntity(); 
     System.out.println("entity "+ entity.getContent()); 

     if (entity != null) { 
      InputStream instream = entity.getContent(); 
      try { 

       return (getStringfromStream(instream)); 
       // do something useful 
      } finally { 
       instream.close(); 
      } 
     } 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (UnsupportedOperationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return "Abhay"; 

} 

輸出:

{"access_token": "5351945621.cf07d1a.1d35647e22f24ed0885f65545f3f1b0b", "user": {"id": "5351945621", "username": "abhaykumar", "profile_picture": "https://instagram.fsgn2-1.fna.fbcdn.net/t51.2885-19/11906329_960233084022564_1448528159_a.jpg", "full_name": "Abhay Kumar", "bio": "", "website": ""}}