Java tutorial
/* * Copyright (c) 2015 OpenSilk Productions LLC * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package syncthing.api; import com.squareup.okhttp.Interceptor; import com.squareup.okhttp.MediaType; import com.squareup.okhttp.Request; import com.squareup.okhttp.RequestBody; import com.squareup.okhttp.Response; import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.nio.charset.Charset; import okio.Buffer; import okio.ByteString; import timber.log.Timber; /** * Created by drew on 10/10/15. */ public class SyncthingApiInterceptor implements Interceptor { final SyncthingApiConfig config; public SyncthingApiInterceptor(SyncthingApiConfig config) { this.config = config; } @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); if (!StringUtils.isEmpty(config.getApiKey())) { request = request.newBuilder() .addHeader(SyncthingApi.HEADER_API_KEY, StringUtils.trim(config.getApiKey())).build(); } else if (!StringUtils.isEmpty(config.getAuth())) { request = request.newBuilder().addHeader("Authorization", StringUtils.trim(config.getAuth())).build(); } if (config.isDebug()) { Timber.d(request.toString()); if (StringUtils.equalsIgnoreCase(request.method(), "POST")) { Buffer buffer = new Buffer(); request.body().writeTo(buffer); ByteString content = buffer.snapshot(); Timber.d("body=%s", buffer.readString(Charset.defaultCharset())); MediaType type = request.body().contentType(); request = request.newBuilder().post(RequestBody.create(type, content)).build(); } } return chain.proceed(request); } }