Как отправить HTTP-запрос к пользовательскому API, используя Oauth 2.0 с AsynceTask - PullRequest
0 голосов
/ 02 июня 2019

Я хотел бы отправить http запрос на пользовательский API. У меня есть детали запроса, и он работает с помощью почтальона (http-клиент). Я пытаюсь перевести этот запрос на Android, используя AsyncTask.

Мне не удалось понять несколько вещей: во-первых, как отправить имеющийся у меня токен на предъявителя (oauth 2.0). второе, как отправить тело Джейсона. Все подробности о запросе находятся по следующей ссылке: https://web.postman.co/collections/7428863-ca5b907d-2752-4d4e-b8a8-29d5cd0dc098?version=latest&workspace=03f5fe5b-0ecd-43f8-8759-3aa868f4cb7f

мой "DoInBackground":

protected Void doInBackground(Void... voids) {
        response = null;
        Log.v("DoInBackground","entered");
        //sending Data
        if (valid) {

            Log.v("ifvaild","entered");
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("https://dmyzcsu4e68qfgi56y7l2qu5ky40da2o.ui.nabu.casa/api/services/script/turn_on");
            //httpPost.addHeader("Accept-Language", "he");
            List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();  
            nameValuePair.add(new BasicNameValuePair("Authorization", "Bearer My Bearer"));
            nameValuePair.add(new BasicNameValuePair("Content-Type", "application/json"));
            nameValuePair.add(new BasicNameValuePair("script.turn_on", "script.gt1"));

            Log.v("nameValue","entered");

            try {
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair, HTTP.UTF_8));

            } catch (UnsupportedEncodingException e)

            {
                e.printStackTrace();
            }
            try {
                response = httpClient.execute(httpPost);
                Log.v("HttpClient","entered");
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

это не работает, я получаю ошибку аутентификации с сервера спасибо за вашу помощь!

1 Ответ

0 голосов
/ 02 июня 2019

Вам нужно добавить эти пары в заголовок. И добавить тело как сущность.

// headers
httpPost.addHeader("Authorization", "Bearer My Bearer");
httpPost.addHeader("Content-Type", "application/json");
httpPost.addHeader("script.turn_on", "script.gt1");

// body
String bodyString = "{\"data\":1}"; // your json string
StringEntity bodyEntity = new StringEntity(bodyString);
httpPost.setEntity(bodyEntity);

Просто совет. Загляните в библиотеку Retrofit2, чтобы сделать все это.

...