HTTPS GET调用可在第三方API的浏览器上使用,但不能通过curl / fuel

时间:2018-07-13 15:42:32

标签: http curl kotlin

我有兴趣从新加坡政府维护的该API中检索诸如汇率之类的信息:

http://www.mas.gov.sg/Statistics/APIs/API-Documentation.aspx

例如,我可以将以下链接复制到浏览器以获取月末汇率:

https://eservices.mas.gov.sg/api/action/datastore/search.json?resource_id=10eafb90-11a2-4fbd-b7a7-ac15a42d60b6&limit=10&sort=end_of_month%20desc

但是通过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等,无论如何都可以。

为什么会这样?

2 个答案:

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