【问题标题】:GET request working from Postman but not in Android and the browser来自 Postman 的 GET 请求,但不适用于 Android 和浏览器
【发布时间】:2021-10-22 06:41:00
【问题描述】:

问题: 我正在使用 api,当我使用邮递员发出 GET 请求时,效果很好,我得到了预期的响应。但是,当我在浏览器和 Android Studio 中测试相同的 get 请求时,它不起作用。

邮递员 sn-p:

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

邮递员标头:

内容类型:application/json

用户:Dermacycle2018

密码:(大密码)

设备:Iphone7

版本SO:IOS 11.2.2

版本APP:1.0.1

Postman-Token:发送请求时计算

主机:发送请求时计算

用户代理:PostmanRuntime/7.28.2

接受:/

接受编码:gzip,deflate,br

连接:保持活动

浏览器 sn-p:

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()!!

        }

    }

【问题讨论】:

  • 你能帮忙附上你改造建造者的代码吗?
  • 你能分享你在 Postman 中设置的标题吗 - 有 12 个可见。也请以文字而不是图片的形式分享它们。在最初提出的问题中,他们不是。请更新更多细节。我怀疑请求成功可能需要一些东西。
  • @PutraNugraha 我刚刚添加了改造构建器
  • @RobEvans 我刚刚用该信息更新了问题

标签: api rest android-studio kotlin postman


【解决方案1】:

我相信您的 HTTP 请求需要多个标头信息,这可以从您的邮递员数据中看出。看来,您需要在 Android 项目的 HTTP 客户端标头中添加 5 个标头值

用户: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 builder 中添加拦截器

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()
    }

【讨论】:

  • 非常感谢,已解决
猜你喜欢
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2020-07-19
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多