【问题标题】:Get request with curl works but Net::HTTP and OpenURI fail使用 curl 获取请求有效,但 Net::HTTP 和 OpenURI 失败
【发布时间】:2017-10-14 07:25:32
【问题描述】:

我的 Rails 应用程序会定期轮询合作伙伴的 ICS 文件,有时它会无缘无故地失败。当我这样做时:

curl https://www.airbnb.es/calendar/ical/234892374.ics?s=23412342323

(这里的参数#是伪造的)

我得到的输出与 ICS 文件的内容相匹配。只需在浏览器中打开它也可以正常工作。

当我使用时:

Net::HTTP.get(URI(a.ics_link))

我收到“503 服务暂时不可用”响应。我也对 OpenURI 进行了同样的尝试,结果相似。

为什么服务器会以不同的方式处理来自 curl 或浏览器的请求?

有没有办法让 Ruby 解决这个问题?

【问题讨论】:

  • 这本身不是一个答案,但我认为在 ruby​​ 中使用 Net::HTTP 处理 API 请求并不常见。我个人使用github.com/httprb/http,但在此页面上,您可以看到其他处理 HTTP 请求的 gem。
  • 我在其余时间工作的实际源代码(这些 airbnb ics 文件似乎总是失败)使用 open-uri。我真的很困惑为什么你会从两个不同的 http 客户端得到不同的响应。
  • 可能是您发出请求的服务器正在检查 curl 未传递的可选标头,例如引用者、cookie、用户代理。我假设它不需要授权。
  • 查看这个答案curl acting very strange
  • 我怀疑得到“503 服务暂时不可用”意味着您违反了他们的服务条款并暂时关闭。使用curl 和浏览器可能是一次性测试,但使用 Net::HTTP 和 OpenURI 对服务器的打击非常大,因为您不是一个好的网络公民。没有更多信息,我们无法为您提供更详细的答案。在互联网上搜索“robots.txt”并遵守其设置;从长远来看,这会对您有所帮助。

标签: ruby http curl net-http open-uri


【解决方案1】:

这是一个 https 问题...不知道为什么,但是将 Ruby 中的 url 切换为 https,它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 2011-05-27
    相关资源
    最近更新 更多