rh4*_*mes 5 http http-get postman
我尝试通过 Postman 向设备的 Restful API 发送 HTTP Get,它工作正常,返回了我期望的所有文本。Postman 建议该请求的 Ruby 代码如下:
url = URI('http://192.168.1.5/rest/op/BD1FD3D893613E79')
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request.basic_auth 'admin', 'admin'
request["accept"] = 'Application/json'
response = http.request(request)
puts response.read_body
Run Code Online (Sandbox Code Playgroud)
但是当我在代码中尝试这样做时,它返回了截断的响应(缺少行),并且我必须多次重新发送相同的 Get 才能获取整个文本响应响应。
上面的 Ruby 代码中是否缺少任何内容导致响应被截断?
更新1
我试过这个
url = URI('http://192.168.1.5/rest/op/BD1FD3D893613E79')
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request.basic_auth 'admin', 'admin'
request["accept"] = 'Application/json'
response = http.request(request)
puts response.read_body
response.read_body do |segment|
puts segment.to_s
end
Run Code Online (Sandbox Code Playgroud)
并产生了这个错误
IOError (Net::HTTPOK#read_body called twice):
Run Code Online (Sandbox Code Playgroud)
更新2
我试过这个
1073 url = URI('http://192.168.1.5/rest/op/BD1FD3D893613E79')
1074 http = Net::HTTP.new(url.host, url.port)
1075 request = Net::HTTP::Get.new(url.to_s)
1076 request.basic_auth 'admin', 'admin'
1077 request["accept"] = 'Application/json'
1078 response = http.request(request)
1079 response.read_body do |segment|
1080 puts segment.to_s
1081 end
Run Code Online (Sandbox Code Playgroud)
并得到这个错误
IOError (Net::HTTPOK#read_body called twice):
app/controllers/Apps_controller.rb:1079:in `block in get_config'
app/controllers/Apps_controller.rb:1045:in `each'
app/controllers/Apps_controller.rb:1045:in `get_config'
Run Code Online (Sandbox Code Playgroud)
基于: http: //ruby-doc.org/stdlib-1.9.3/libdoc/net/http/rdoc/Net/HTTPResponse.html#method-i-read_body
read_body将主体作为流返回,因此您应该迭代它,例如:
response.read_body do |segment|
puts segment
end
Run Code Online (Sandbox Code Playgroud)
如果你想获得完整的身体,只需使用:response.body