Ruby 如何在收到503响应后重新发送请求

Ruby 如何在收到503响应后重新发送请求,ruby,Ruby,我正在向服务器发送GET请求。如果我得到503响应,我想再次发送请求 这是我的密码: status_code = 503 while status_code == 503 puts status_code sleep 0.1 + rand page, status_code = send_request(query_url(query, page_number)) puts status_code end 观察控制台,我看到即使两个503记录在一行中,循环也会退

我正在向服务器发送GET请求。如果我得到503响应,我想再次发送请求

这是我的密码:

status_code = 503
while status_code == 503
    puts status_code
    sleep 0.1 + rand
    page, status_code = send_request(query_url(query, page_number))
    puts status_code
end
观察控制台,我看到即使两个503记录在一行中,循环也会退出

我试过相反的方法:

status_code = 200
until status_code == 200
    puts status_code
    sleep 0.1 + rand
    page, status_code = send_request(query_url(query, page_number))
    puts status_code
end

但现在循环永远不会退出。我显然误解了一些基本的东西。如何编写循环,使循环一直持续到代码不是503/直到它是200?

我认为您检查的值是不同的类型,因此退出时您的

检查对象的类型:

puts status_code.class
sleep 0.1 + rand
page, status_code = send_request(query_url(query, page_number))
puts status_code.class

我认为您检查的值是不同类型的,因此您的
while
退出

检查对象的类型:

puts status_code.class
sleep 0.1 + rand
page, status_code = send_request(query_url(query, page_number))
puts status_code.class

第一个示例中的
while
循环看起来不错
send\u request
可能返回字符串
“503”
,而不是整数,因此与整数
503
的比较返回false。尝试使用字符串进行比较

status_code == "503"
# => true
或者将send_请求的返回值强制为整数

status_code.to_i == 501
# => true

第一个示例中的
while
循环看起来不错
send\u request
可能返回字符串
“503”
,而不是整数,因此与整数
503
的比较返回false。尝试使用字符串进行比较

status_code == "503"
# => true
或者将send_请求的返回值强制为整数

status_code.to_i == 501
# => true

后面的代码不应该执行循环的内容
status\u code
设置为200,然后立即检查条件并跳过循环。对你来说不是这样吗?第一个例子看起来不错。您确定
send\u request
正在返回一个整数作为数组的第二个元素吗?是否可能是字符串“503”
?在返回值中添加“to_i”就成功了@姆洛维奇:为什么不发帖子作为答案?@orde:刚刚发了,谢谢!后面的代码不应该执行循环的内容
status\u code
设置为200,然后立即检查条件并跳过循环。对你来说不是这样吗?第一个例子看起来不错。您确定
send\u request
正在返回一个整数作为数组的第二个元素吗?是否可能是字符串“503”?在返回值中添加“to_i”就成功了@姆洛维奇:为什么不发帖子作为答案?@orde:刚刚发了,谢谢!response_code是我的send_请求方法中的第二个返回值response_code是我的send_请求方法中的第二个返回值Thank@Suever。我最初的评论解决了这个问题,所以我把它作为一个答案发布了出来。我现在编辑了答案。谢谢@Suever。我最初的评论解决了这个问题,所以我把它作为一个答案发布了出来。我现在编辑了答案。