J'ai utilisé cette méthode https://stackoverflow.com/a/31744565/5829906 mais ne publie pas de données.
Voici mon code
OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart("rating", "5").addFormDataPart("comment", "Awesome")
.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
try {
Response response = client.newCall(request).execute();
String responseString = response.body().string();
response.body().close();
}catch (Exception e) {
e.printStackTrace();
}
J'ai essayé DefaultHttpClient, qui semble fonctionner, mais cela montre que c'est obsolète, alors j'ai pensé essayer quelque chose de différent..Cant comprendre ce qui ne va pas dans ce
Vous sélectionnez MediaType MultipartBuilder.FORM
qui sert à télécharger le fichier/l'image en plusieurs parties
public static final MediaType FORM = MediaType.parse("multipart/form-data");
essayez d'envoyer comme ça
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
RequestBody formBody = new FormBody.Builder().add("search", "Jurassic Park").build();
Request request = new Request.Builder().url("https://en.wikipedia.org/w/index.php").post(formBody).build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful())
throw new IOException("Unexpected code " + response);
System.out.println(response.body().string());
}
Pour ceux qui peuvent encore venir ici, utiliser avec Retrofi2 et transmettre correctement vos données au corps de la requête. Même si vous définissez "application/x-www-form-urlencoded" et que vous n'avez pas transmis correctement vos données, vous aurez toujours un problème. C'était ma situstion
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request.Builder requestBuilder = original.newBuilder()
.addHeader("ContentType", "application/x-www-form-urlencoded");
Request request = requestBuilder.build();
return chain.proceed(request);
}
});
OkHttpClient client = httpClient.build();
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
Api api = retrofit.create(Api.class);
Assurez-vous ensuite de transmettre vos données à votre point de terminaison api comme indiqué ci-dessous. PAS comme JSON, ni objet de classe ou chaîne mais comme corps de requête.
RequestBody formBody = new FormBody.Builder()
.addEncoded("grant_type", "password")
.addEncoded("username", username)
.addEncoded("password", password)
.build();
appelez votre service api
Call<Response> call = api.login(formBody);
J'espère que cela aide quelqu'un