2015-01-13 104 views
4

我對Twitter的這一請求,利用javax.ws.rs微博使用的oauth2 javax.ws.rs

WebTarget target = new WebTargetBuilder(client, OAUTH_API_ENDPOINT).build(); 

    Builder request = target 
      .request(MediaType.APPLICATION_JSON) 
      .header("Authorization", "Basic " + encodedCredentials) 
      .header("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); 
    Response postResponse = request 
      .post(Entity.entity("grant_type=client_credentials", MediaType.TEXT_PLAIN)); 

    System.out.println(postResponse.readEntity(String.class)); 

encodedCredentials是我的祕密消費品和消費的關鍵在基地64

請求我的編碼「M試圖做的是:

POST /oauth2/token HTTP/1.1 
Host: api.twitter.com 
User-Agent: My Twitter App v1.0.23 
Authorization: Basic eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJn 
       NmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==Content-Type: application/x-www- form-urlencoded;charset=UTF-8 
Content-Length: 29 
Accept-Encoding: gzip 

grant_type=client_credentials 

我不斷收到403禁止:{ 「錯誤」:[{ 「代碼」:170, 「消息」: 「缺少必需的參數:grant_type」, 「標籤」:」 forbidden_​​missing_parameter「}]}

看起來帖子正文沒有設置正確,任何人都知道如何設置它?

回答

2

什麼你可以嘗試是改變POST請求體/實體的這樣的內容類型:

.post(Entity.entity("grant_type=client_credentials", MediaType.APPLICATION_FORM_URLENCODED) 
+0

這就是它,謝謝.. – Jones

0

我在PHP中使用相同的,我想你錯過了所需的參數,如oauth_signature

0

因此,從Twitter獲取不記名消費者密鑰和消費者密碼的最終代碼如下所示:

private static final String OAUTH_API_ENDPOINT = "https://api.twitter.com/oauth2/token"; 
    private String consumerKey = "your consumer key"; 
    private String consumerSecret = "your consumer secret"; 

// Constructs the request for requesting a bearer token and returns that 
// token as a string 
public String requestBearerToken() throws IOException, InterruptedException, ExecutionException { 

    String encodedCredentials = encodeCredentials(); 

    Client client = ClientBuilder.newClient(); 

    WebTarget target = new WebTargetBuilder(client, OAUTH_API_ENDPOINT).build(); 

    Response postResponse = target 
      .request(MediaType.APPLICATION_JSON) 
      .header("Authorization", "Basic " + encodedCredentials + "Content-Type: application/x-www-form-urlencoded;charset=UTF-8") 
      .post(Entity.entity("grant_type=client_credentials", MediaType.APPLICATION_FORM_URLENCODED)); 

    return postResponse.toString(); 
} 

// Encodes the consumer key and secret to create the basic authorization key 
public String encodeCredentials() { 
    try { 
     String encodedConsumerKey = URLEncoder.encode(consumerKey, "UTF-8"); 
     String encodedConsumerSecret = URLEncoder.encode(consumerSecret, 
       "UTF-8"); 

     String fullKey = encodedConsumerKey + ":" + encodedConsumerSecret; 
     byte[] encodedBytes = Base64.encodeBase64(fullKey.getBytes()); 
     return new String(encodedBytes); 
    } catch (UnsupportedEncodingException e) { 
     return new String(); 
    } 
}