【问题标题】:Ruby HTTPRequest takes 60+ seconds to facebook oauth serverRuby HTTPRequest 需要 60 多秒才能到达 facebook oauth 服务器
【发布时间】:2017-05-31 20:16:03
【问题描述】:

我正在尝试设置手动 oauth 流程以通过 facebook 登录我的用户,这是相当标准的票价。

我的重定向工作正常,并将代码发送到我的回调函数。然后我必须用我的代码交换我的 access_token 与 facebook。如果它不完全超时,则需要 60 多秒。我之前已经多次完成了完全相同的功能并且没有遇到任何问题。其他网站会立即响应,而 facebook 出于某种原因需要 60 多秒。请记住,在我的生产服务器的 rails 控制台中运行的相同代码可以立即运行。如果我通过 curl 做一个等效的请求,它也可以立即工作。这个问题只发生在我本地机器上的 Rails 控制台中。我用 RestClient 和 HTTParty 进行了测试,得到了相同的结果。

url = "https://graph.facebook.com/v2.8/oauth/access_token?client_id=#{CLIENT_ID}&redirect_uri=http://127.0.0.1:3000/facebook_oauth_redirect&client_secret=#{CLIENT_SECRET}&code={#CODE}"
response = RestClient.get(url, :content_type => 'application/json', :accept => :json)

我不知道出了什么问题。我怀疑可能与 SSL 有关,但我可以毫无问题地从其他 https 站点获得响应。我把它归结为 TCPSocket 本身需要 60 多秒才能打开。

s = TCPSocket.new 'graph.facebook.com', 443

这大约需要 75 秒才能打开,而其他网站只需要一小部分时间。我的同事确认他可以立即打开 TCPSocket。我现在完全没有想法,所以欢迎任何建议。

编辑:似乎问题可能是我几周前买的新无线路由器。我将我的 Mac 连接到我的 iPhone 热点,它立即工作。

【问题讨论】:

  • 您的url 末尾有一个随机的}。这是一个错误吗? CLIENT_SECRETCODE 没有插值在那里。你在其他机器上试过吗?也许你被扼杀了。也许您的 Ruby 安装已损坏,升级 Ruby 会有所帮助。
  • 对不起,在我急于审查其中一些值时,我只是用常量替换了它们。也许我会尝试不同版本的 ruby​​,我不认为我被限制考虑我每 5 分钟请求一次,如果那样的话。此外,它还适用于 curl。
  • 更改 ruby​​ 的版本并没有解决任何问题,只是更新。
  • 与其他事物的正常 HTTP 连接是否可以快速工作? HTTPS 怎么样?
  • 这很奇怪。与其他站点的 HTTP 连接和 HTTPS 连接没有问题,只有 graph.facebook api 并且仅在 rails 控制台中。如果我将 get 请求放在浏览器中或 curl 中它可以工作,请使用 RestClient 或 HTTParty 并且它会失败。不管我重置我的无线路由器,重启一两次,然后欺骗我的 MAC 地址。这似乎解决了问题。

标签: ruby-on-rails ruby facebook facebook-graph-api oauth


【解决方案1】:

解决方案最终是我的无线路由器或调制解调器,不完全确定是什么。自从我几周前升级后,钱就在路由器上。

重启没有帮助,所以我伪造了 MAC 地址,重启后似乎解决了问题。

考虑到浏览器/curl 中的所有内容都运行正常,不太确定问题出在哪里,问题只是 rails 控制台(欺骗已修复)。

【讨论】:

    猜你喜欢
    • 2017-02-24
    • 1970-01-01
    • 2012-09-28
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多