You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Android Studio3.0中使用Retrofit2请求返回HTML代码的问题求助

解决Retrofit 2请求返回HTML的问题

看起来你遇到的问题是Retrofit请求没有返回预期的接口数据,而是返回了HTML代码——这种情况通常是请求配置有误,或者服务器没有正确识别你的请求导致的。我来帮你一步步排查和解决:

1. 先确认Retrofit是否配置了正确的转换器

你的getClient()方法里只写了.addConv...,大概率是没完整添加JSON转换器。Retrofit默认只能处理ResponseBody,如果服务器返回的是JSON数据,但你没加转换器,虽然不会直接返回HTML,但如果请求本身有问题(比如路径错误),服务器可能返回错误页面的HTML。

请确保添加了Gson转换器(如果接口返回JSON):

// 先添加依赖(build.gradle)
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

// 然后在Retrofit初始化时添加
retrofit = new Retrofit.Builder()
    .baseUrl(baseUrl)
    .addConverterFactory(GsonConverterFactory.create()) // 必须添加这个
    // 其他配置...
    .build();

2. 验证完整请求URL是否正确

把你的BASE_URL和接口的@POST路径拼接起来,比如如果BASE_URL是"https://your-domain.com/",那完整请求URL应该是:
https://your-domain.com/clip/clipmobile/action/clike/clipId/{id}/token/{token}/app/21

用Postman或者curl直接测试这个URL(替换{id}和{token}为真实值):

  • 如果Postman也返回HTML:说明服务器端的接口路径有误,或者你的参数(id/token)无效,服务器返回了错误页面。
  • 如果Postman返回正确的JSON:那问题出在Retrofit的请求配置上。

3. 检查请求方法和参数传递是否符合服务器要求

你的接口是把id和token放在URL路径里,但有些服务器可能期望这些参数是POST表单参数或者JSON请求体,而不是路径参数。请对照服务器的接口文档确认:

  • 如果是表单参数:需要改用@Field,并添加@FormUrlEncoded注解:
@FormUrlEncoded
@POST("clip/clipmobile/action/clike/app/21")
Call<ResponseBody> likeRequest(
    @Field("clipId") String id,
    @Field("token") String token
);
  • 如果是JSON请求体:需要定义一个实体类,用@Body传递:
public class LikeRequest {
    private String clipId;
    private String token;
    // getters and setters
}

@POST("clip/clipmobile/action/clike/app/21")
Call<ResponseBody> likeRequest(@Body LikeRequest request);

4. 添加必要的请求头,模拟移动端请求

很多服务器会根据User-Agent判断请求来源,如果你的请求没有设置移动端的User-Agent,可能被当成桌面浏览器请求,返回网页版的HTML。可以添加拦截器设置请求头:

OkHttpClient client = new OkHttpClient.Builder()
    .addInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request originalRequest = chain.request();
            Request modifiedRequest = originalRequest.newBuilder()
                .header("User-Agent", "Android App/1.0 (your-app-package)")
                .header("Accept", "application/json") // 明确告诉服务器要JSON数据
                .build();
            return chain.proceed(modifiedRequest);
        }
    })
    .build();

// 把这个client设置到Retrofit里
retrofit = new Retrofit.Builder()
    .baseUrl(baseUrl)
    .client(client)
    .addConverterFactory(GsonConverterFactory.create())
    .build();

5. 打印请求日志,精准定位问题

添加日志拦截器,查看实际发送的请求和服务器的响应详情,这是排查Retrofit问题最有效的方法:

// 添加依赖(build.gradle)
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.3'

// 配置日志拦截器
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); // 打印完整的请求和响应

OkHttpClient client = new OkHttpClient.Builder()
    .addInterceptor(loggingInterceptor)
    .build();

// 关联到Retrofit
retrofit = new Retrofit.Builder()
    .baseUrl(baseUrl)
    .client(client)
    .addConverterFactory(GsonConverterFactory.create())
    .build();

之后在Logcat里就能看到完整的请求URL、请求头、请求体,以及服务器返回的响应状态码、响应体(包括那个HTML内容),从HTML里你能判断是404错误、权限问题还是其他原因。

按照上面的步骤一步步排查,应该能找到问题所在。

内容的提问来源于stack exchange,提问作者amirhesni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:58:07