为什么Net:HTTP/HTTParty调用中断Watir-Webdriver脚本/ Net :: ReadTimeout错误

dsp*_*099 5 ruby http watir node.js web-scraping

我已经设置了一个Watir-Webdriver脚本,我想向远程服务报告:

  puts "Starting..."

  b = Watir::Browser.new :ie
  puts "Started browser"

  puts "Setting status as non-idle"

  request = Net::HTTP::Post.new()
  url = URI(HOME + '/update_status')
  request.body = JSON.generate({ scrapeId: SCRAPE_ID, status: 'working' })
  # This step freezes processing
  Net::HTTP.start(url.host, url.port) {|http| http.request(request)}

  puts "This step never happens"
Run Code Online (Sandbox Code Playgroud)

同时,node.js/express watir正在ping以具有以下端点:

app.post('/update_status', function(req, res) {
  redis.hset(req.body.scrapeId, 'status', req.body.status);
  if (req.body.status === 'finished') {
    redis.expire(req.body.scrapeId, SIX_HOURS);
  }
  res.send('response from post /update_status');
});
Run Code Online (Sandbox Code Playgroud)

问题:为什么Net :: HTTP会在击中时超时/update_status?有趣的是,如果服务器返回404(端点不存在),Watir脚本将继续正常运行.

Net::ReadTimeout 显然是culrpit,但为什么呢?

dsp*_*099 2

“假设是所有问题之母”——这是一些非常聪明的男人或女孩的说法。

答案很简单,也很愚蠢——我添加了一个 node.js 中间件,省略了next();其中的 。事实证明,脚本没有任何问题 - 我找错了地方并且没有对其进行测试。哎呀。