android - 使用带有 Kotlin 和 Retrofit 的 Skyscanner API 时出现 500 错误
问题描述
我想使用 Kotlin 和 Retrofit 连接到 Skyscanner API。https://rapidapi.com/skyscanner/api/skyscanner-flight-search
尝试发布“创建会话”调用时,我收到 500 错误,但日志没有给出具体原因。我只能假设我的帖子数据格式不正确,但我正在使用带有 GSon 的 Retrofit 来为我处理这个问题。
一个线索是,在他们的 Java 示例代码中,他们以以下格式传递表单数据:“inboundDate=2019-09-10&children=0&adults=1”而在从我的 sessionObject 类转换 GSon 之后,我的数据格式为{ "adults":1,"country":"GB","outboundDate":"2020-01-06"} - 我不确定如何使用 Retrofit 以该格式传递我的数据,以及这是否是问题导致500。
以下是一些代码片段:
// my object for posting data
class SessionBody {
@SerializedName("country")
var country: String = ""
@SerializedName("currency")
var currency: String = ""
...etc...
// my interface
@Headers("Content-Type: application/x-www-form-urlencoded")
@POST("pricing/v1.0/")
fun postUser(@Body sessionBody: SessionBody): Call<Void>
// my connector class
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY
val client = OkHttpClient.Builder()
.addInterceptor(Interceptor { chain ->
val original = chain.request()
val request = original.newBuilder()
.header("X-RapidAPI-Host", "skyscanner-skyscanner-flight-search- v1.p.rapidapi.com")
.header("X-RapidAPI-Key", "...my key here...")
.method(original.method(), original.body())
.build()
return@Interceptor chain.proceed(request)
})
.addInterceptor(interceptor)
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build()
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(GsonBuilder().create()))
.client(client)
.build()
val api = retrofit.create(TravelEzyApi::class.java)
val call = api.postUser(sessionBody)
这是日志的输出......
D/OkHttp: --> POST https://skyscanner-skyscanner-flight-search-v1.p.rapidapi.com/apiservices/pricing/v1.0/
D/OkHttp: Content-Type: application/x-www-form-urlencoded
Content-Length: 142
X-RapidAPI-Host: skyscanner-skyscanner-flight-search-v1.p.rapidapi.com
X-RapidAPI-Key: ... my key here ...
{"adults":1,"country":"GB","currency":"GBP","destinationPlace":"BKK-sky","locale":"en-GB","originPlace":"LHR-sky","outboundDate":"2020-01-06"}
--> END POST (142-byte body)
D/OkHttp: <-- 500 Internal Server Error
D/OkHttp: Cache-Control: private
Content-Type: application/json
Date: Tue, 22 Oct 2019 10:48:44 GMT
Server: RapidAPI-1.0.32
X-RapidAPI-Region: AWS - eu-west-1
X-RapidAPI-Version: 1.0.32
Content-Length: 2
Connection: keep-alive
{}
D/OkHttp: <-- END HTTP (2-byte body)
非常感谢任何帮助或线索。
解决方案
500 状态码表示服务器遇到了不知道如何处理的情况。
现在应该可以正常工作了。如果错误仍然存在,您可以随时写信给 RapidAPI 支持团队 support@rapidapi.com
推荐阅读
- linux - docker windows 上的 linux 容器 ERR_EMPTY_RESPONSE
- python - 如何使用 LSTM 模型进一步预测?
- java - 有没有办法在不丢失环境和流程部分的情况下将代理导出并连续恢复到另一个项目 DialogFlowCX 中?
- google-cloud-platform - 无法删除 google api gateway 配置文件
- sql - 使用 SQL 查询选择前 10% 的客户
- c# - 无法使用路径打开套接字到 url
- python-3.x - 错误消息:Selenium python 中的元素不可交互
- python - 无法抓取视频(缩放流)
- java - con.rollback() 会回滚 con.commit() 已经提交的更改吗?
- css - 如何更改进度条末尾显示的百分比的文本颜色