Four Stars

Components for http post request

Hello,

I want to make a http post request to sending a file in parameter and return a file. The java code below works. With which component and what parameters can we do the equivalent? (I tested tfileFetch, tHttpPost etc ... but maybe with parameter errors)

 

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.InputStreamBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;


public class Adresses {

public static void GeocodeAdresses(String cheminFichierSource, String cheminFichierCible) {

// Préparation du fichier à uploader
File fichierSource = new File(cheminFichierSource.replace("/", "\\"));
FileInputStream fichierUpload = null;
try {
fichierUpload = new FileInputStream(fichierSource);
CloseableHttpClient httpclient = HttpClients.createDefault();

// URL API
HttpPost httppost = new HttpPost("https://api-adresse.data.gouv.fr/search/csv/");
MultipartEntityBuilder entity = MultipartEntityBuilder.create();

// Paramètres
entity.addPart("data", new InputStreamBody(fichierUpload, fichierSource.getName()));
httppost.setEntity(entity.build());

// Exécution de la requête
HttpResponse reponse = httpclient.execute(httppost);

// Code retour
int statusCode = reponse.getStatusLine().getStatusCode();
System.out.println("Code retour : " + statusCode);

// Téléchargement du fichier
HttpEntity reponseEntity = reponse.getEntity();
BufferedInputStream bis = new BufferedInputStream(reponseEntity.getContent());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(cheminFichierCible.replace("/","\\"))));
int inByte;
while((inByte = bis.read()) != -1) bos.write(inByte);
bis.close();
bos.close();

} catch (ClientProtocolException e) {
System.err.println("Connexion impossible");
e.printStackTrace();
} catch (IOException e) {
System.err.println("Lecture du fichier impossible");
e.printStackTrace();
} finally {
try {
if (fichierUpload != null) fichierUpload.close();
} catch (IOException e) {}
}
}

},

Thanks for your help,
Pauline

1 REPLY
Eight Stars sgv
Eight Stars

Re: Components for http post request

Hi ,

 

I don't think that you can pass a file in a post method with a talend component. Maybe in a premium version ...

But check your private message. We can talk about this.

Good luck,

SGV