0

Je tente de me connecter au Freesound API en utilisant Java et le client HTTP Apache (version 4.3).Authentification OAuth2 en Java en utilisant HttpClient

J'ai réussi à faire en sorte que mon application gère avec succès le processus d'authentification. C'est-à-dire que j'ai échangé le code d'autorisation de l'utilisateur pour un jeton d'accès et un jeton d'actualisation, comme indiqué dans Step 3 of the Freesound API OAuth2 Authentication Procedure.

Maintenant, je souhaite télécharger des sons de l'API.

Le documentation for downloading sounds from the API donne un exemple de commande cURL que j'essaie maintenant d'imiter en Java.

curl -H "Authorization: Bearer {{access_token}}" 'https://www.freesound.org/apiv2/sounds/14854/download/'

Malheureusement, la seule façon que je sais comment télécharger des fichiers à partir d'URL est avec la ligne Apache Commons IO:

org.apache.commons.io.FileUtils.copyURLToFile(URL, File)

Depuis ce nouveau lien ne dispose pas d'une extension de fichier, il ne me permet pas de spécifier l'en-tête d'autorisation, je ne peux pas utiliser cette méthode.

Mon code ne fonctionne pas actuellement. S'il vous plaît aider!

private static void downloadSound() { 

    // the output stream to save .wav file 
    FileOutputStream out; 

    // the file to save 
    File f = new File("test.wav"); 

    // initializes http client and builds authorization header 
    HttpResponse res; 
    CloseableHttpClient httpclient = HttpClients.createDefault(); 
    String authorizationString = "Bearer " + accessToken; 

    try { 

     // assigns url and authorization header to GET request 
     HttpGet request = new HttpGet(
       URI.create("https://www.freesound.org/apiv2/sounds/14854/download/")); 
     request.addHeader("Authentication", authorizationString); 

     // sends GET request 
     res = httpclient.execute(request); 

     // downloads file 
     FileOutputSTream out = new FileOutputStream(f); 
     int read = 0; 
     byte[] bytes = new byte[1024]; 

     while ((read = res.getEntity().getContent().read(bytes)) != -1) { 
      out.write(bytes, 0, read); 
     } 

     System.out.println("Done!"); 

     // closes input/output streams 
     res.getEntity().getContent().close(); 
     out.close(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

Répondre

0

Il pourrait être Autorisation vs authentification

curl -H "Authorization: Bearer {{access_token}}"

VS

request.addHeader("Authentication", authorizationString);

Vous pourriez avoir plus de facilité à l'aide Apache HttpClient, comme il est conçu pour la communication d'ordinateur à ordinateur.

Questions connexes