Отправка параметров в запросе POST с использованием залпа - PullRequest
0 голосов
/ 22 февраля 2019

Попытка добавить Mangnet Link в учетную запись Premiumize с помощью их API https://app.swaggerhub.com/apis-docs/premiumize.me/api/1.4#/transfer/transferCreate.

Ответное сообщение: {"status":"error","message":"src is missing"}

Код выглядит следующим образом: -

void pushMagnet(final String apiKey, final String magnetLink, final Context context) {
    final String url = "https://premiumize.me/api/transfer/create?apikey=" + apiKey;

    Map<String, String> magnetSrc = new HashMap<>();
    //Parameters i want to send
    magnetSrc.put("src", magnetLink);

    RequestQueue queue = Volley.newRequestQueue(context);

    JsonObjectRequest stringRequest = new JsonObjectRequest(Request.Method.POST, url,
            //here added as an JSON Object
            new JSONObject(magnetSrc),
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.e("Rest Response:", response.toString());
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("Rest Error:", error.toString());
        }
    }
    ) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headers = new HashMap<>();
            headers.put("accept", "application/json");
            headers.put("Content-Type", "multipart/form-data");

            return headers;
        }
    };
    queue.add(stringRequest);
}

Я уже попробовал это здесь: Передача параметра с залпом POST

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Обходной путь:

Используйте эту библиотеку и этот код:

https://github.com/amitshekhariitbhu/Fast-Android-Networking

void pushMagnet(final String apiKey, final String magnetLink, final Context context) {
    final String url = "https://premiumize.me/api/transfer/create?apikey=" + apiKey;
    JSONObject srcMagnet = new JSONObject();
    try {
        srcMagnet.put("src", magnetLink);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    OkHttpClient client = new OkHttpClient().newBuilder()
            .addInterceptor(new GzipRequestInterceptor()).build();
    AndroidNetworking.initialize(context, client);

    AndroidNetworking.post(url)
            .addHeaders("accept", "application/json")
            .addHeaders("Content-Type", "multipart/form-data")
            .addQueryParameter("src", magnetLink)
            .build().getAsJSONObject(new JSONObjectRequestListener() {
        @Override
        public void onResponse(JSONObject response) {
            Log.e("Server response:", response.toString());
        }

        @Override
        public void onError(ANError anError) {
            Log.e("Server error:", anError.toString());
        }
    });

}
0 голосов
/ 22 февраля 2019

Для отправки параметров в залп вам необходимо переопределить getParams ()

@Override
protected Map<String,String> getParams()
{

    Map<String,String> params = new HashMap<>();
    // the POST parameters:
    params.put("src", magnetLink);
    Log.d("Volley","Volley params "+params);
    return params;

}
0 голосов
/ 22 февраля 2019

Скорее всего ошибка в параметре заголовка "Content-Type" .

Вы использовали неверную информацию заголовка "multipaltform/form-data"

Попробуйте добавить "Content-Type" к "multipart/form-data" к данным заголовка.

Представление MULTIPARTDATA отличается от представления обычногоформа.Вы должны использовать MultiPartEntity вместо Map.

Попробуйте перейти по этой ссылке для составных данных: Как отправить POST «multipart / form-data» в Android с помощью Volley

Надеюсь, это решит вашу проблему.

...