GET 请求在 Postman 中有效,但在 Android 和浏览器中无效

GET request working from Postman but not in Android and the browser

问题: 我正在使用 api,当我使用邮递员执行 GET 请求时,工作完美,我得到了预期的响应。但是,当我在浏览器和 Android Studio 中测试相同的获取请求时,它不起作用。

Postaman 片段:

https://i.stack.imgur.com/b2eeS.png

邮递员headers:

Content-Type: application/json

用户:Dermacycle2018

密码:(它是一个大密码)

设备:Iphone7

版本SO: IOS 11.2.2

版本APP:1.0.1

Postman-Token:发送请求时计算

Host:请求发送时计算

User-Agent: PostmanRuntime/7.28.2

接受:/

Accept-Encoding: gzip,deflate,br

连接:keep-alive

浏览器代码段:

https://i.stack.imgur.com/6KjpW.png

Android代码:

这里我使用改造来处理响应

interface DermaCycleApiClient {

    @GET
    suspend fun getTratamientosFaciales(@Url url:String)
    :Response<TratamientosFacialesResponse>

}

fun getRetrofit():Retrofit{
        return Retrofit.Builder().
        baseUrl("http://dermaservice.theappmaster.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .build()
    }
suspend fun getTratamientosFaciales(tf:String):TratamientosFacialesResponse{
        return withContext(Dispatchers.IO){
            val response = retrofit.create(DermaCycleApiClient::class.java).
            getTratamientosFaciales("http://dermaservice.theappmaster.com/Tratamiento.ashx?Tipo=TF")
 
            response.body()!!

        }

    }

我相信您的 HTTP 请求需要几个 Headers 信息,从您的邮递员数据中可以看出。似乎,您需要在 Android 项目

的 HTTP 客户端 header 中添加 5 个 header 值

用户:Dermacycle2018
密码:(它是一个大密码)
设备:Iphone7
版本SO:IOS 11.2.2
版本APP:1.0.1

您可以使用拦截器将其添加到 OkHttpClient 生成器中。

class HeaderInterceptor: Interceptor {
    
    override fun intercept(chain: Interceptor.Chain): Response {
        val newRequest = chain.request().newBuilder()
             .addHeader("User", "Dermacycle2018")
             .addHeader("Password", ENCRYPTED_PASSWORD)
             .addHeader("Device", DEVICE_NAME)
             .addHeader("VersionSO", OS_VERSION)
             .addHeader("VersionAPP", "1.0.1")
        return chain.proceed(newRequest.build())
    }
}

然后在您的 OkHttpClient 构建器中添加拦截器

val okHttpClient = OkHttpClient().newBuilder()
    .addInterceptor(commonHeader)
    .build

然后在您的改造构建器中添加 okHttpClient

fun getRetrofit(): Retrofit {
    val okHttpClient = OkHttpClient().newBuilder()
        .addInterceptor(commonHeader)
        .build

    return Retrofit.Builder()
        .baseUrl("http://dermaservice.theappmaster.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .client(okHttpClient)
        .build()
    }