我有兴趣从新加坡政府维护的该API中检索诸如汇率之类的信息:
http://www.mas.gov.sg/Statistics/APIs/API-Documentation.aspx
例如,我可以将以下链接复制到浏览器以获取月末汇率:
但是通过curl或Kotlin Fuel进行的HTTP调用不起作用:
curl --request GET \
--url 'https://eservices.mas.gov.sg/api/action/datastore/search.json?resource_id=10eafb90-11a2-4fbd-b7a7-ac15a42d60b6&limit=10&sort=end_of_month%20desc'
它返回一个404页面。
我已经从浏览器调用中删除了cookie等,无论如何都可以。
为什么会这样?
答案 0 :(得分:1)
问题与Kotlin无关。
means = [statistics.mean(chunk) for chunk in my_array_split(array, 10)]
上的远程应用似乎对不同的用户代理进行了不同的处理,从而禁止了任何来自curl等CLI实用程序或您的代码的交互。尝试卷曲它以提供不同的https://eservices.mas.gov.sg/api
标头,看看会发生什么。甚至以下虚假的用户代理也可以发挥作用:
User-Agent
同一件事应该从代码中以相同的方式工作-只需发送自定义curl 'https://eservices.mas.gov.sg/api/action/datastore/search.json?resource_id=10eafb90-11a2-4fbd-b7a7-ac15a42d60b6&limit=10&sort=end_of_month%20desc' \
-H'User-Agent: x____x' \
-v
标头和您的请求即可。 并祈祷有一天不会将其列入黑名单。
答案 1 :(得分:0)
考虑使用okHttp
fun calling() {
val client = OkHttpClient()
val request = Request.Builder()
.url("https://eservices.mas.gov.sg/api/action/datastore/search.json?resource_id=10eafb90-11a2-4fbd-b7a7-ac15a42d60b6&limit=10&sort=end_of_month%20desc")
.get()
.build()
val response = client.newCall(request).execute()
println(response.code())
}