2016-01-20 2 views
0

Пожалуйста, простите меня, если я спрошу что-то глупое, я новичок здесь. Мне нужно реализовать OAuth в моем приложении Java для аутентификации с помощью API launchpad.net. documentation указывает инициирование запроса маркера с тремя параметрами: oauth_consumer_key, например. (имя моего приложения), oauth_signature_method, например. «PLAINTEXT» и oauth_signature, например. Строка «&». Я понял, что для большинства библиотек OAuth требуется, чтобы . Я уже приобрел ключ Consumer и Id/Secret от поставщика OAuth (например, выпущен в Twitter), и большинство примеров организовано таким образом. Тем не менее, launchpad.net выдаст эти параметры только после выпуска токена запроса (они не используют стороннего поставщика). Как я могу продолжить? В настоящее время я застрял после того, как попробовал некоторые библиотеки, которые забрасывали ошибки. Большое спасибо за любую полезную информацию. Официальная библиотека запуска находится на питоне.Запросы токена Oauth перед выдачей учетных данных провайдера

Мой исходный код ниже:

public class Quicky { 

    public static void main(String[] args) throws Exception { 
     CloseableHttpClient httpclient = HttpClients.createDefault(); 
     try { 
      HttpGet httpGet = new HttpGet("https://launchpad.net/+request-token"); 
      CloseableHttpResponse response1 = httpclient.execute(httpGet); 
try { 
       System.out.println("Your current GET request status:" + response1.getStatusLine()); 
       HttpEntity entity1 = response1.getEntity(); 
    EntityUtils.consume(entity1); 
      } finally { 
       response1.close(); 
      } 

      HttpRequest request; 
      HttpPost httpPost = new HttpPost("https://launchpad.net/+request-token"); 
      PostMethod poster = new PostMethod(); 
      List <NameValuePair> postParams = new ArrayList <NameValuePair>(); 
      postParams.add(new BasicNameValuePair("oauth_customer_key", "XXXX")); 
      postParams.add(new BasicNameValuePair("oauth_signature_method", "PLAINTEXT")); 
      postParams.add(new BasicNameValuePair("oauth_signature", "&")); 
    httpPost.setEntity(new UrlEncodedFormEntity(postParams, "utf-8")); 
//   httpPost.setEntity(entity1); 
      httpclient.execute(httpPost); 

      HttpParameters requestParams = (HttpParameters) postParams; 
      CloseableHttpResponse response2 = httpclient.execute(httpPost); 
      try { 
       System.out.println("Your current POST request status:" + response2.getStatusLine()); 
       HttpEntity entity2 = response2.getEntity(); 
       // do something useful with the response body 
       // and ensure it is fully consumed 
       EntityUtils.consume(entity2); 
      } finally { 
       response2.close(); 
      } 
     } finally { 
      httpclient.close(); 
     } 
    } 

} 
+0

Покажите, что вы пробовали, и уточните. У вас есть законно хороший вопрос, но он, вероятно, будет закрыт, потому что вы не предоставляете достаточно информации. –

+0

@MadPhysicist благодарит за полезное наблюдение. Я добавил свой код. Когда я бегу, я получаю 401. – SyCode

ответ

0

я, наконец, решена сообщения об ошибках вопрос после некоторых исследований и кода рефакторинга. Правильный код ниже, возможно, он может быть полезен кому-то там.

public class LaunchPadTokenRetriever { 

    public static void main(String[] args) throws ClientProtocolException,  IOException{ 

    CloseableHttpClient httpclient = HttpClients.createDefault(); 

    HttpPost httpPost = new HttpPost("https://launchpad.net/+request-token"); 
    httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded"); 

    List <NameValuePair> urlParams = new ArrayList <NameValuePair>(); 
    urlParams.add(new BasicNameValuePair("oauth_signature", "&")); 
    urlParams.add(new BasicNameValuePair("oauth_consumer_key", "tester")); 
    urlParams.add(new BasicNameValuePair("oauth_signature_method", "PLAINTEXT")); 
    httpPost.setEntity(new UrlEncodedFormEntity(urlParams)); 
    CloseableHttpResponse response = httpclient.execute(httpPost); 
    System.out.println(response); 

    try { 
     System.out.println(response.getStatusLine()); 
     HttpEntity entity = response.getEntity(); 
     ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
     String responseBody = httpclient.execute(httpPost, responseHandler); 
     System.out.println("Initial credentials ---> "+ responseBody); 
     System.out.println();  
     String getresponse = responseBody; 

     EntityUtils.consume(entity); 
    } finally { 
     response.close(); 
    } 
    } 

} 
Смежные вопросы