2017-01-25 2 views
0

Я столкнулся с другой службой Api, которую я должен запросить с помощью POST, но без содержимого тела, я отправляю изображение, преобразованное в base64, я искал этот вопрос, и я нашел это "решение", которое он не работал:Как сделать POST с пустым телом, используя OKHttp

1:

RequestBody reqbody = RequestBody.create(null, new byte[0]); 
Request.Builder formBody = new Request.Builder().url(url).method("POST",reqbody).header("Content-Length", "0"); 

2:

request = new Request.Builder() 
       .url(BASE_URL + route) 
       .method("POST", RequestBody.create(null, new byte[0])) 
       .post(requestBody) 
       .build(); 

даже я явное высказывание, что это метод POST, его продолжает отправлять запрос GET и нет t запрос POST. Благодаря!

Моя активность:

public String SendImage(String image64) throws IOException{ 
    //RequestBody reqbody = RequestBody.create(null, new byte[0]); 

    Request request = new Request.Builder() 
      .url("http://ap.imagensbrasil.org/api/1/upload/?key=9c9dfe77cd3bdbaa7220c6bbaf7452e7&source=" + image64 + "&format=txt") 
      .method("POST", RequestBody.create(null, new byte[0])) 
      .header("Content-Length", "0") 
      .build(); 

    OkHttpClient Client = client.newBuilder() .readTimeout(25, TimeUnit.SECONDS).build(); 
    Response response = Client.newCall(request).execute(); 
    return response.body().string(); 
} 

ответ

-1

Try с следующим кодом, он может помочь.

MediaType JSON = MediaType.parse("application/json; charset=utf-8"); 
RequestBody body = RequestBody.create(JSON, bodyString); 

OkHttpClient client = new OkHttpClient(); 
Request request = new Request.Builder() 
     .url("http://ap.imagensbrasil.org/api/1/upload/?key=9c9dfe77cd3bdbaa7220c6bbaf7452e7&source=" + image64 + "&format=txt") 
     .post("") 
     .build(); 
+0

Но где я поставил URL? У этого API нет контента для отправки, у меня даже нет строки тела, все внутри URL. Посмотрите мое обновление –

+0

Попробуйте этот код. – Rohit

+0

метод .post ("") не принимает строку, поэтому я сделал: RequestBody body = RequestBody.create (JSON, ""); и затем .post (тело). не работает –

0

Он работает на модифицированной, так что если вы по-прежнему с Retrofit v2.0 вы можете использовать это:

public class Base64EncodeRequestInterceptor implements Interceptor { 

    @Override 
    public Response intercept(Chain chain) throws IOException { 
     Request originalRequest = chain.request(); 
     Request.Builder builder = originalRequest.newBuilder(); 

     if (originalRequest.method().equalsIgnoreCase(POST)) { 
      builder = originalRequest.newBuilder() 
       .method(originalRequest.method(), encode(originalRequest.body())); 
     } 


     return chain.proceed(builder.build()); 
    } 

    private RequestBody encode(RequestBody body) { 
     return new RequestBody() { 
      @Override 
      public MediaType contentType() { 
       return body.contentType(); 
      } 

      @Override 
      public void writeTo(BufferedSink sink) throws IOException { 
       Buffer buffer = new Buffer(); 
       body.writeTo(buffer); 
       byte[] encoded = Base64.encode(buffer.readByteArray(), Base64.DEFAULT); 
       sink.write(encoded); 
       buffer.close(); 
       sink.close(); 
      } 
     }; 
    } 
} 
+0

что именно делает код? –

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