在 RoR 中,通过代理请求网页时如何获取状态码?

Posted

技术标签:

【中文标题】在 RoR 中,通过代理请求网页时如何获取状态码?【英文标题】:In RoR, how do I get the status code when requesting a web page through a proxy? 【发布时间】:2016-09-17 19:34:58 【问题描述】:

我使用的是 Rails 4.2.7。发出请求时如何获取状态码?我正在尝试以下方法

  uri = URI(url)
  content = nil
  status = nil
  content_type = nil
  res1 = Net::HTTP.SOCKSProxy('127.0.0.1', 50001).start(uri.host, uri.port) do |http|
    puts "launching #uri.path"
    resp = http.get(uri.path)
    status = resp.status
    content = resp.content
    content_type = resp['content-type']
  end

但它会导致以下错误。我可以清楚地看到它是 403,但我希望在一个变量中保持这种整洁,或者至少有一些我可以捕捉到的错误

Error during processing: undefined method `status' for #<Net::HTTPForbidden 403 Forbidden readbody=true>
/Users/davea/Documents/workspace/myproject/app/helpers/webpage_helper.rb:77:in `block in get_content'
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:853:in `start'
/Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:584:in `start'
/Users/davea/Documents/workspace/myproject/app/helpers/webpage_helper.rb:74:in `get_content'

【问题讨论】:

【参考方案1】:

我想你想要resp.code

找出答案的一种方法是使用pry gem。安装后,您可以将 binding.pry 放在您的 http.get 行之后并运行您的代码。当它碰到撬线时,它将停止执行并打开一个 IRB 提示,然后你可以直接尝试不同的事情resp。一个非常好的功能是您可以cd resp 并且现在“进入”对象本身。输入ls,您可以看到所有可用的方法。更容易弄清楚这种事情。

【讨论】:

以上是关于在 RoR 中,通过代理请求网页时如何获取状态码?的主要内容,如果未能解决你的问题,请参考以下文章

HTTP状态码

Http状态码汇总

接口测试——HttpClient工具的https请求代理设置请求头设置获取状态码和响应头

nginx返回状态码

订阅 Observable 时如何在 onNext 案例中获取状态码

错误码