Search in sources :

Example 26 with Level

use of okhttp3.logging.HttpLoggingInterceptor.Level in project Tusky by tuskyapp.

the class OkHttpUtils method getCompatibleClientBuilder.

/**
 * Makes a Builder with the maximum range of TLS versions and cipher suites enabled.
 * <p>
 * It first tries the "approved" list of cipher suites given in OkHttp (the default in
 * ConnectionSpec.MODERN_TLS) and if that doesn't work falls back to the set of ALL enabled,
 * then falls back to plain http.
 * <p>
 * API level 24 has a regression in elliptic curves where it only supports secp256r1, so this
 * first tries a fallback without elliptic curves at all, and then tries them after.
 * <p>
 * TLS 1.1 and 1.2 have to be manually enabled on API levels 16-20.
 */
@NonNull
public static OkHttpClient.Builder getCompatibleClientBuilder(SharedPreferences preferences) {
    boolean httpProxyEnabled = preferences.getBoolean("httpProxyEnabled", false);
    String httpServer = preferences.getString("httpProxyServer", "");
    int httpPort = Integer.parseInt(preferences.getString("httpProxyPort", "-1"));
    ConnectionSpec fallback = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS).allEnabledCipherSuites().supportsTlsExtensions(true).build();
    List<ConnectionSpec> specList = new ArrayList<>();
    specList.add(ConnectionSpec.MODERN_TLS);
    addNougatFixConnectionSpec(specList);
    specList.add(fallback);
    specList.add(ConnectionSpec.CLEARTEXT);
    OkHttpClient.Builder builder = new OkHttpClient.Builder().addInterceptor(getUserAgentInterceptor()).readTimeout(30, TimeUnit.SECONDS).writeTimeout(30, TimeUnit.SECONDS).connectionSpecs(specList);
    if (httpProxyEnabled && !httpServer.isEmpty() && (httpPort > 0) && (httpPort < 65535)) {
        InetSocketAddress address = InetSocketAddress.createUnresolved(httpServer, httpPort);
        builder.proxy(new Proxy(Proxy.Type.HTTP, address));
    }
    if (BuildConfig.DEBUG) {
        builder.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC));
    }
    return enableHigherTlsOnPreLollipop(builder);
}
Also used : OkHttpClient(okhttp3.OkHttpClient) ConnectionSpec(okhttp3.ConnectionSpec) InetSocketAddress(java.net.InetSocketAddress) ArrayList(java.util.ArrayList) Proxy(java.net.Proxy) HttpLoggingInterceptor(okhttp3.logging.HttpLoggingInterceptor) NonNull(android.support.annotation.NonNull)

Example 27 with Level

use of okhttp3.logging.HttpLoggingInterceptor.Level in project sonarqube by SonarSource.

the class CeHttpClientImplTest method changeLogLevel_throws_ISE_if_http_error.

@Test
public void changeLogLevel_throws_ISE_if_http_error() {
    String message = "blah";
    server.enqueue(new MockResponse().setResponseCode(500).setBody(message));
    // initialize registration of process
    setUpWithHttpUrl(ProcessId.COMPUTE_ENGINE);
    assertThatThrownBy(() -> underTest.changeLogLevel(LoggerLevel.DEBUG)).isInstanceOf(IllegalStateException.class).hasMessage("Failed to call HTTP server of process " + ProcessId.COMPUTE_ENGINE).hasRootCauseInstanceOf(IOException.class).hasRootCauseMessage(format("Failed to change log level in Compute Engine. Code was '500' and response was 'blah' for url " + "'http://%s:%s/changeLogLevel'", server.getHostName(), server.getPort()));
}
Also used : MockResponse(okhttp3.mockwebserver.MockResponse) IOException(java.io.IOException) Test(org.junit.Test)

Example 28 with Level

use of okhttp3.logging.HttpLoggingInterceptor.Level in project sonarqube by SonarSource.

the class GitlabHttpClient method getReporterLevelAccessProject.

// 
// This method is used to check if a user has REPORTER level access to the project, which is a requirement for PR decoration.
// As of June 9, 2021 there is no better way to do this check and still support GitLab 11.7.
// 
public Optional<Project> getReporterLevelAccessProject(String gitlabUrl, String pat, Long gitlabProjectId) {
    String url = String.format("%s/projects?min_access_level=20&id_after=%s&id_before=%s", gitlabUrl, gitlabProjectId - 1, gitlabProjectId + 1);
    LOG.debug(String.format("get project : [%s]", url));
    Request request = new Request.Builder().addHeader(PRIVATE_TOKEN, pat).get().url(url).build();
    try (Response response = client.newCall(request).execute()) {
        checkResponseIsSuccessful(response);
        String body = response.body().string();
        LOG.trace(String.format("loading project payload result : [%s]", body));
        List<Project> projects = Project.parseJsonArray(body);
        if (projects.isEmpty()) {
            return Optional.empty();
        } else {
            return Optional.of(projects.get(0));
        }
    } catch (JsonSyntaxException e) {
        throw new IllegalArgumentException("Could not parse GitLab answer to retrieve a project. Got a non-json payload as result.");
    } catch (IOException e) {
        logException(url, e);
        throw new IllegalStateException(e.getMessage(), e);
    }
}
Also used : Response(okhttp3.Response) JsonSyntaxException(com.google.gson.JsonSyntaxException) GsonBuilder(com.google.gson.GsonBuilder) OkHttpClientBuilder(org.sonarqube.ws.client.OkHttpClientBuilder) Request(okhttp3.Request) IOException(java.io.IOException)

Example 29 with Level

use of okhttp3.logging.HttpLoggingInterceptor.Level in project u2020 by JakeWharton.

the class DebugView method setupNetworkSection.

private void setupNetworkSection() {
    final ApiEndpoints currentEndpoint = ApiEndpoints.from(networkEndpoint.get());
    final EnumAdapter<ApiEndpoints> endpointAdapter = new EnumAdapter<>(getContext(), ApiEndpoints.class);
    endpointView.setAdapter(endpointAdapter);
    endpointView.setSelection(currentEndpoint.ordinal());
    RxAdapterView.itemSelections(endpointView).map(endpointAdapter::getItem).filter(item -> item != currentEndpoint).subscribe(selected -> {
        if (selected == ApiEndpoints.CUSTOM) {
            Timber.d("Custom network endpoint selected. Prompting for URL.");
            showCustomEndpointDialog(currentEndpoint.ordinal(), "http://");
        } else {
            setEndpointAndRelaunch(selected.url);
        }
    });
    final NetworkDelayAdapter delayAdapter = new NetworkDelayAdapter(getContext());
    networkDelayView.setAdapter(delayAdapter);
    networkDelayView.setSelection(NetworkDelayAdapter.getPositionForValue(behavior.delay(MILLISECONDS)));
    RxAdapterView.itemSelections(networkDelayView).map(delayAdapter::getItem).filter(item -> item != behavior.delay(MILLISECONDS)).subscribe(selected -> {
        Timber.d("Setting network delay to %sms", selected);
        behavior.setDelay(selected, MILLISECONDS);
        networkDelay.set(selected);
    });
    final NetworkVarianceAdapter varianceAdapter = new NetworkVarianceAdapter(getContext());
    networkVarianceView.setAdapter(varianceAdapter);
    networkVarianceView.setSelection(NetworkVarianceAdapter.getPositionForValue(behavior.variancePercent()));
    RxAdapterView.itemSelections(networkVarianceView).map(varianceAdapter::getItem).filter(item -> item != behavior.variancePercent()).subscribe(selected -> {
        Timber.d("Setting network variance to %s%%", selected);
        behavior.setVariancePercent(selected);
        networkVariancePercent.set(selected);
    });
    final NetworkPercentageAdapter failureAdapter = new NetworkPercentageAdapter(getContext());
    networkFailureView.setAdapter(failureAdapter);
    networkFailureView.setSelection(NetworkPercentageAdapter.getPositionForValue(behavior.failurePercent()));
    RxAdapterView.itemSelections(networkFailureView).map(failureAdapter::getItem).filter(item -> item != behavior.failurePercent()).subscribe(selected -> {
        Timber.d("Setting network failure to %s%%", selected);
        behavior.setFailurePercent(selected);
        networkFailurePercent.set(selected);
    });
    final NetworkPercentageAdapter errorAdapter = new NetworkPercentageAdapter(getContext());
    networkErrorView.setAdapter(errorAdapter);
    networkErrorView.setSelection(NetworkPercentageAdapter.getPositionForValue(behavior.errorPercent()));
    RxAdapterView.itemSelections(networkErrorView).map(errorAdapter::getItem).filter(item -> item != behavior.errorPercent()).subscribe(selected -> {
        Timber.d("Setting network error to %s%%", selected);
        behavior.setErrorPercent(selected);
        networkErrorPercent.set(selected);
    });
    final EnumAdapter<NetworkErrorCode> errorCodeAdapter = new EnumAdapter<>(getContext(), NetworkErrorCode.class);
    networkErrorCodeView.setAdapter(errorCodeAdapter);
    networkErrorCodeView.setSelection(networkErrorCode.get().ordinal());
    RxAdapterView.itemSelections(networkErrorCodeView).map(errorCodeAdapter::getItem).filter(item -> item != networkErrorCode.get()).subscribe(selected -> {
        Timber.d("Setting network error code to %s%%", selected);
        networkErrorCode.set(selected);
    // No need to update 'behavior' as the factory already pulls from the preference.
    });
    int currentProxyPosition = networkProxyAddress.isSet() ? ProxyAdapter.PROXY : ProxyAdapter.NONE;
    final ProxyAdapter proxyAdapter = new ProxyAdapter(getContext(), networkProxyAddress);
    networkProxyView.setAdapter(proxyAdapter);
    networkProxyView.setSelection(currentProxyPosition);
    RxAdapterView.itemSelections(networkProxyView).filter(position -> !networkProxyAddress.isSet() || position != ProxyAdapter.PROXY).subscribe(position -> {
        if (position == ProxyAdapter.NONE) {
            // Only clear the proxy and restart if one was previously set.
            if (currentProxyPosition != ProxyAdapter.NONE) {
                Timber.d("Clearing network proxy");
                // TODO: Keep the custom proxy around so you can easily switch back and forth.
                networkProxyAddress.delete();
                // Force a restart to re-initialize the app without a proxy.
                ProcessPhoenix.triggerRebirth(getContext());
            }
        } else if (networkProxyAddress.isSet() && position == ProxyAdapter.PROXY) {
            Timber.d("Ignoring re-selection of network proxy %s", networkProxyAddress.get());
        } else {
            Timber.d("New network proxy selected. Prompting for host.");
            showNewNetworkProxyDialog(proxyAdapter);
        }
    });
    // Only show the endpoint editor when a custom endpoint is in use.
    endpointEditView.setVisibility(currentEndpoint == ApiEndpoints.CUSTOM ? VISIBLE : GONE);
    if (currentEndpoint == ApiEndpoints.MOCK_MODE) {
        // Disable network proxy if we are in mock mode.
        networkProxyView.setEnabled(false);
        networkLoggingView.setEnabled(false);
    } else {
        // Disable network controls if we are not in mock mode.
        networkDelayView.setEnabled(false);
        networkVarianceView.setEnabled(false);
        networkFailureView.setEnabled(false);
        networkErrorView.setEnabled(false);
        networkErrorCodeView.setEnabled(false);
    }
// We use the JSON rest adapter as the source of truth for the log level.
// final EnumAdapter<RestAdapter.LogLevel> loggingAdapter =
// new EnumAdapter<>(getContext(), RestAdapter.LogLevel.class);
// networkLoggingView.setAdapter(loggingAdapter);
// networkLoggingView.setSelection(retrofit.getLogLevel().ordinal());
// networkLoggingView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
// @Override
// public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
// RestAdapter.LogLevel selected = loggingAdapter.getItem(position);
// if (selected != retrofit.getLogLevel()) {
// Timber.d("Setting logging level to %s", selected);
// retrofit.setLogLevel(selected);
// } else {
// Timber.d("Ignoring re-selection of logging level " + selected);
// }
// }
// 
// @Override public void onNothingSelected(AdapterView<?> adapterView) {
// }
// });
}
Also used : BuildConfig(com.jakewharton.u2020.BuildConfig) LinearLayout(android.widget.LinearLayout) Switch(android.widget.Switch) Cache(okhttp3.Cache) CaptureIntents(com.jakewharton.u2020.data.CaptureIntents) FrameLayout(android.widget.FrameLayout) OnClick(butterknife.OnClick) BindView(butterknife.BindView) NetworkDelay(com.jakewharton.u2020.data.NetworkDelay) Picasso(com.squareup.picasso.Picasso) AttributeSet(android.util.AttributeSet) AnimationSpeed(com.jakewharton.u2020.data.AnimationSpeed) InetSocketAddressPreferenceAdapter(com.jakewharton.u2020.data.prefs.InetSocketAddressPreferenceAdapter) Locale(java.util.Locale) Strings(com.jakewharton.u2020.util.Strings) ContextThemeWrapper(android.view.ContextThemeWrapper) PicassoDebugging(com.jakewharton.u2020.data.PicassoDebugging) TemporalAccessor(org.threeten.bp.temporal.TemporalAccessor) View(android.view.View) MockResponseSupplier(com.jakewharton.u2020.data.api.MockResponseSupplier) Method(java.lang.reflect.Method) LumberYard(com.jakewharton.u2020.data.LumberYard) DebugAction(com.jakewharton.u2020.ui.debug.ContextualDebugActions.DebugAction) NetworkVariancePercent(com.jakewharton.u2020.data.NetworkVariancePercent) Set(java.util.Set) MILLISECONDS(java.util.concurrent.TimeUnit.MILLISECONDS) R(com.jakewharton.u2020.R) InetSocketAddress(java.net.InetSocketAddress) DisplayMetrics(android.util.DisplayMetrics) Timber(timber.log.Timber) ApiEndpoint(com.jakewharton.u2020.data.ApiEndpoint) TextView(android.widget.TextView) Application(android.app.Application) MockRepositoriesResponse(com.jakewharton.u2020.data.api.MockRepositoriesResponse) DateTimeFormatter(org.threeten.bp.format.DateTimeFormatter) Context(android.content.Context) RxAdapterView(com.jakewharton.rxbinding.widget.RxAdapterView) EnumAdapter(com.jakewharton.u2020.ui.misc.EnumAdapter) ButterKnife(butterknife.ButterKnife) NetworkBehavior(retrofit2.mock.NetworkBehavior) Intent(android.content.Intent) IsMockMode(com.jakewharton.u2020.data.IsMockMode) NetworkErrorCode(com.jakewharton.u2020.data.NetworkErrorCode) NetworkFailurePercent(com.jakewharton.u2020.data.NetworkFailurePercent) PixelRatioEnabled(com.jakewharton.u2020.data.PixelRatioEnabled) DisplayLeakActivity(com.squareup.leakcanary.internal.DisplayLeakActivity) ProcessPhoenix(com.jakewharton.processphoenix.ProcessPhoenix) NetworkErrorPercent(com.jakewharton.u2020.data.NetworkErrorPercent) Inject(javax.inject.Inject) LogsDialog(com.jakewharton.u2020.ui.logs.LogsDialog) Instant(org.threeten.bp.Instant) ApiEndpoints(com.jakewharton.u2020.data.ApiEndpoints) Injector(com.jakewharton.u2020.data.Injector) ScalpelEnabled(com.jakewharton.u2020.data.ScalpelEnabled) Keyboards(com.jakewharton.u2020.util.Keyboards) ZoneId(org.threeten.bp.ZoneId) Named(javax.inject.Named) Build(android.os.Build) ScalpelWireframeEnabled(com.jakewharton.u2020.data.ScalpelWireframeEnabled) LayoutInflater(android.view.LayoutInflater) Preference(com.f2prateek.rx.preferences.Preference) PixelGridEnabled(com.jakewharton.u2020.data.PixelGridEnabled) Spinner(android.widget.Spinner) AlertDialog(android.support.v7.app.AlertDialog) OkHttpClient(okhttp3.OkHttpClient) StatsSnapshot(com.squareup.picasso.StatsSnapshot) EditText(android.widget.EditText) ValueAnimator(android.animation.ValueAnimator) NetworkErrorCode(com.jakewharton.u2020.data.NetworkErrorCode) ApiEndpoint(com.jakewharton.u2020.data.ApiEndpoint) EnumAdapter(com.jakewharton.u2020.ui.misc.EnumAdapter) ApiEndpoints(com.jakewharton.u2020.data.ApiEndpoints)

Example 30 with Level

use of okhttp3.logging.HttpLoggingInterceptor.Level in project DevRing by LJYcoder.

the class HttpLoggingInterceptor method intercept.

@Override
public Response intercept(Chain chain) throws IOException {
    Level level = this.level;
    Request request = chain.request();
    if (level == Level.NONE) {
        return chain.proceed(request);
    }
    boolean logBody = level == Level.BODY;
    boolean logHeaders = logBody || level == Level.HEADERS;
    RequestBody requestBody = request.body();
    boolean hasRequestBody = requestBody != null;
    Connection connection = chain.connection();
    Protocol protocol = connection != null ? connection.protocol() : Protocol.HTTP_1_1;
    String requestStartMessage = "--> " + request.method() + ' ' + request.url() + ' ' + protocol;
    if (!logHeaders && hasRequestBody) {
        requestStartMessage += " (" + requestBody.contentLength() + "-byte body)";
    }
    logger.log(requestStartMessage);
    if (logHeaders) {
        if (hasRequestBody) {
            // them to be included (when available) so there values are known.
            if (requestBody.contentType() != null) {
                logger.log("Content-Type: " + requestBody.contentType());
            }
            if (requestBody.contentLength() != -1) {
                logger.log("Content-Length: " + requestBody.contentLength());
            }
        }
        Headers headers = request.headers();
        for (int i = 0, count = headers.size(); i < count; i++) {
            String name = headers.name(i);
            // Skip headers from the request body as they are explicitly logged above.
            if (!"Content-Type".equalsIgnoreCase(name) && !"Content-Length".equalsIgnoreCase(name)) {
                logger.log(name + ": " + headers.value(i));
            }
        }
        if (!logBody || !hasRequestBody) {
            logger.log("--> END " + request.method());
        } else if (bodyEncoded(request.headers())) {
            logger.log("--> END " + request.method() + " (encoded body omitted)");
        } else {
            Buffer buffer = new Buffer();
            requestBody.writeTo(buffer);
            Charset charset = UTF8;
            MediaType contentType = requestBody.contentType();
            if (contentType != null) {
                charset = contentType.charset(UTF8);
            }
            logger.log("");
            if (isPlaintext(buffer)) {
                logger.log(buffer.readString(charset));
                logger.log("--> END " + request.method() + " (" + requestBody.contentLength() + "-byte body)");
            } else {
                logger.log("--> END " + request.method() + " (binary " + requestBody.contentLength() + "-byte body omitted)");
            }
        }
    }
    long startNs = System.nanoTime();
    Response response;
    try {
        response = chain.proceed(request);
    } catch (Exception e) {
        logger.log("<-- HTTP FAILED: " + e);
        throw e;
    }
    long tookMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNs);
    ResponseBody responseBody = response.body();
    long contentLength = responseBody.contentLength();
    String bodySize = contentLength != -1 ? contentLength + "-byte" : "unknown-length";
    logger.log("<-- " + response.code() + ' ' + response.message() + ' ' + response.request().url() + " (" + tookMs + "ms" + (!logHeaders ? ", " + bodySize + " body" : "") + ')');
    if (logHeaders) {
        Headers headers = response.headers();
        for (int i = 0, count = headers.size(); i < count; i++) {
            logger.log(headers.name(i) + ": " + headers.value(i));
        }
        if (!logBody || !HttpHeaders.hasBody(response)) {
            logger.log("<-- END HTTP");
        } else if (bodyEncoded(response.headers())) {
            logger.log("<-- END HTTP (encoded body omitted)");
        } else {
            BufferedSource source = responseBody.source();
            // Buffer the entire body.
            source.request(Long.MAX_VALUE);
            Buffer buffer = source.buffer();
            Charset charset = UTF8;
            MediaType contentType = responseBody.contentType();
            if (contentType != null) {
                charset = contentType.charset(UTF8);
            }
            if (!isPlaintext(buffer)) {
                logger.log("");
                logger.log("<-- END HTTP (binary " + buffer.size() + "-byte body omitted)");
                return response;
            }
            if (contentLength != 0) {
                logger.log("");
                logger.log(buffer.clone().readString(charset));
            }
            logger.log("<-- END HTTP (" + buffer.size() + "-byte body)");
        }
    }
    return response;
}
Also used : Buffer(okio.Buffer) HttpHeaders(okhttp3.internal.http.HttpHeaders) Headers(okhttp3.Headers) Request(okhttp3.Request) Connection(okhttp3.Connection) Charset(java.nio.charset.Charset) IOException(java.io.IOException) EOFException(java.io.EOFException) ResponseBody(okhttp3.ResponseBody) Response(okhttp3.Response) MediaType(okhttp3.MediaType) Protocol(okhttp3.Protocol) RequestBody(okhttp3.RequestBody) BufferedSource(okio.BufferedSource)

Aggregations

Request (okhttp3.Request)14 Response (okhttp3.Response)13 IOException (java.io.IOException)12 ResponseBody (okhttp3.ResponseBody)12 Test (org.junit.Test)12 HttpUrl (okhttp3.HttpUrl)9 RequestBody (okhttp3.RequestBody)8 Charset (java.nio.charset.Charset)7 Headers (okhttp3.Headers)7 OkHttpClient (okhttp3.OkHttpClient)7 MockResponse (okhttp3.mockwebserver.MockResponse)7 Buffer (okio.Buffer)7 BufferedSource (okio.BufferedSource)7 Context (android.content.Context)6 Connection (okhttp3.Connection)6 MediaType (okhttp3.MediaType)6 Protocol (okhttp3.Protocol)6 HttpHeaders (okhttp3.internal.http.HttpHeaders)6 EOFException (java.io.EOFException)5 ArrayList (java.util.ArrayList)5