Aristide13
Aristide13

Reputation: 242

Go from OkHttp to HttpURLConnection

For reasons of library compatibility issues I would like to use HttpURLConnection to call requests on an API. Here is the code I use with OkHttp to get a token access:

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();
                }
            }
        });

    }

So I would like to know how to get the equivalent of requestbody to pass it in setRequestProperty ()?

Thanks for your help

Upvotes: 0

Views: 1389

Answers (1)

Joni
Joni

Reputation: 111219

The request body is not a request property (header), it's the body of the request, and without OkHttp or other supporting libraries you have to format it yourself, encode any special characters that need to be encoded etc.

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");

Once you have the request body, you write it to the connection's output stream. For example:

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

Upvotes: 1

Related Questions