解決OkHttp Invalid Input錯誤:Content-Type錯誤或不受支持

如果您在使用OkHttp時遇到了”OkHttp Invalid Input. The Content-Type is missing or not supported in the response”錯誤,那麼本文將介紹如何解決此問題。

一、什麼是OkHttp Invalid Input錯誤

當我們使用OkHttp發送HTTP請求時,伺服器返回的響應會包含Content-Type標頭,用於描述響應的數據類型。如果您在HTTP響應中找不到Content-Type標頭,或者Content-Type標頭的值不受OkHttp支持,則會出現”OkHttp Invalid Input”這個錯誤。

二、解決方案

1. 檢查響應

首先,我們需要檢查伺服器返回的響應,確保響應中包含Content-Type標頭,並且其值是OkHttp支持的數據類型。

  Response response = client.newCall(request).execute();
  String contentType = response.header("Content-Type");
  if (contentType == null || !contentType.contains("json")) {
    // handle invalid content type
  }

在上面的代碼中,我們通過檢查響應的Content-Type標頭來確保響應內容是json類型的。

2. 設置OkHttp支持的MIME類型

如果伺服器返回的內容類型不是OkHttp所支持的類型,則需要在我們的代碼中聲明支持的MIME類型。以下是一個例子,我們聲明了OkHttp支持的json和html響應類型。

  OkHttpClient client = new OkHttpClient.Builder()
      .addInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
          Request request = chain.request();
          Response response = chain.proceed(request);
          MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
          if (response.body() != null) {
            String contentType = response.body().contentType().toString();
            if (!contentType.contains("application/json") && !contentType.contains("text/html")) {
              return response.newBuilder()
                  .body(ResponseBody.create(mediaType, ""))
                  .build();
            }
          }
          return response;
        }
      })
      .build();

3. 調試錯誤

如果您還是無法解決”OkHttp Invalid Input”錯誤,可以啟用OkHttp日誌來幫助您排查問題。以下是示例代碼:

  OkHttpClient client = new OkHttpClient.Builder()
      .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
      .addInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
          Request request = chain.request();
          Response response = chain.proceed(request);
          String contentType = response.header("Content-Type");
          if (contentType == null || !contentType.contains("json")) {
            Log.d("OkHttp", "Invalid Content-Type: " + contentType);
            throw new IOException("Invalid Content-Type");
          }
          return response;
        }
      })
      .build();

在上面的代碼中,我們啟用了OkHttp日誌並在攔截器中檢查了Content-Type標頭。如果ContentType無效,我們將列印錯誤消息並拋出一個IOException異常。

三、總結

在使用OkHttp時,如果出現”OkHttp Invalid Input”錯誤,我們需要檢查響應的Content-Type標頭並確保其值是OkHttp支持的數據類型。如果還是無法解決問題,可以嘗試在代碼中聲明支持的MIME類型或者使用OkHttp日誌來進行調試。

原創文章,作者:FCMDC,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/374268.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FCMDC的頭像FCMDC
上一篇 2025-04-27 15:27
下一篇 2025-04-27 15:27

相關推薦

發表回復

登錄後才能評論