Go от OkHttp до HttpURLConnection - PullRequest
       33

Go от OkHttp до HttpURLConnection

0 голосов
/ 07 апреля 2020

Из-за проблем совместимости библиотек я хотел бы использовать HttpURLConnection для вызова запросов к API. Вот код, который я использую с OkHttp для получения доступа к токену:

private void getAccessToken(){

        OkHttpClient okHttpClient = new OkHttpClient();
        RequestBody requestBody = new FormEncodingBuilder().add("grant_type", "authorization_code")
                .add("client_id", "1568xxxxxxxxxxxxxxxxxjro.apps.googleusercontent.com")
                .add("client_secret", "AMe0xxxxxxxxxxxx")
                .add("redirect_uri", "")
                .add("code", serverCode)
                .build();
        Request request = new Request.Builder()
                .url("https://www.googleapis.com/oauth2/v4/token")
                .post(requestBody)
                .build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
                Log.i("severcode","failure");
            }

            @Override
            public void onResponse(Response response) throws IOException {
                try {
                    JSONObject jsonObject = new JSONObject(response.body().string());
                    token = jsonObject.optString("access_token");
                    tokenExpired = SystemClock.elapsedRealtime() + jsonObject.optLong("expires_in") * 1000;
                    Log.i("severcode",String.valueOf(token));
                    createGooglePhotosClient();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

    }

Поэтому я хотел бы знать, как получить эквивалент requestbody для передачи его в setRequestProperty ()?

Спасибо за вашу помощь

1 Ответ

1 голос
/ 07 апреля 2020

Тело запроса - это не свойство запроса (заголовок), это тело запроса, и без OkHttp или других вспомогательных библиотек вы должны отформатировать его самостоятельно, кодировать любые специальные символы, которые необходимо кодировать и т. Д. c.

String requestBody = "grant_type=authorization_code&client_id=1568xxxxxxxxxxxxxxxxxjro.apps.googleusercontent.com&" 
      + "client_secret=AMe0xxxxxxxxxxxx&redirect_uri=&code=" + serverCode + "\n\n";
byte[] requestBodyBytes = requestBody.getBytes("UTF-8");

Получив тело запроса, вы записываете его в выходной поток соединения. Например:

connection.setRequestProperty("content-type", "application/x-www-form-urlencoded");
connection.setDoOutput(true);
out = connection.getOutputStream();
out.write(requestBodyBytes)
out.flush();
...