在本章中,我们将探讨如何使用 Ruby 内置的 Net::HTTP 库来处理 HTTP 请求。Net::HTTP 是一个功能强大的库,可以帮助我们发送 GET、POST 等请求,并接收响应。
安装与配置
在 Ruby 中,Net::HTTP 不需要单独安装,因为它是标准库的一部分。只要你的 Ruby 环境已经安装好,就可以直接使用它。对于大多数项目来说,我们只需要在代码文件的顶部引入 net/http 库即可:
require 'net/http'
发送 GET 请求
发送简单的 GET 请求
发送一个简单的 GET 请求是 Net::HTTP 的基本用法之一。下面是一个例子,展示了如何获取指定 URL 的数据:
require 'net/http'
require 'uri'
url = URI("http://example.com")
response = Net::HTTP.get_response(url)
puts response.code # 输出响应的状态码
puts response.body # 输出响应的内容在这个例子中,我们首先通过 URI 类将字符串转换为一个 URI 对象,然后调用 Net::HTTP.get_response 方法来获取响应。
设置请求头
有时我们需要向服务器发送一些额外的信息,例如身份验证令牌或自定义的头部信息。这可以通过设置请求头来实现:
// www.javascriptcn.com code example
require 'net/http'
require 'uri'
url = URI("http://example.com")
req = Net::HTTP::Get.new(url)
req['Authorization'] = 'Bearer YOUR_ACCESS_TOKEN'
req['Content-Type'] = 'application/json'
res = Net::HTTP.start(url.host, url.port, use_ssl: url.scheme == 'https') do |http|
http.request(req)
end
puts res.code
puts res.body在这个例子中,我们创建了一个新的 Net::HTTP::Get 请求对象,并设置了自定义的头部信息。然后我们使用 Net::HTTP.start 方法来发起请求,同时也可以传递 SSL 相关的参数。
发送 POST 请求
发送简单的 POST 请求
除了 GET 请求之外,Net::HTTP 还可以用来发送 POST 请求。以下是如何发送一个简单的 POST 请求:
// www.javascriptcn.com code example
require 'net/http'
require 'uri'
url = URI("http://example.com/api/resource")
req = Net::HTTP::Post.new(url)
req.set_form_data({'key' => 'value'})
res = Net::HTTP.start(url.host, url.port, use_ssl: url.scheme == 'https') do |http|
http.request(req)
end
puts res.code
puts res.body在这个例子中,我们首先创建了一个 Net::HTTP::Post 请求对象,并设置了表单数据。然后通过 Net::HTTP.start 方法发送请求。
发送带有 JSON 数据的 POST 请求
当需要发送 JSON 数据时,我们可以使用 set_form_data 方法或者手动构建请求体:
// www.javascriptcn.com code example
require 'net/http'
require 'uri'
require 'json'
url = URI("http://example.com/api/resource")
req = Net::HTTP::Post.new(url)
req['Content-Type'] = 'application/json'
req.body = JSON.generate({ key: 'value' })
res = Net::HTTP.start(url.host, url.port, use_ssl: url.scheme == 'https') do |http|
http.request(req)
end
puts res.code
puts res.body这里我们通过 JSON.generate 方法生成 JSON 字符串,并将其作为请求体发送。
处理响应
无论发送的是 GET 还是 POST 请求,我们都需要处理来自服务器的响应。响应通常包含状态码、头部信息和响应体。我们可以从响应对象中获取这些信息:
- 状态码:通过
response.code获取。 - 头部信息:通过
response['header_name']获取。 - 响应体:通过
response.body获取。
错误处理
在实际应用中,网络请求可能会失败,因此我们需要适当地处理错误。这可以通过检查响应的状态码来实现:
// www.javascriptcn.com code example
require 'net/http'
require 'uri'
url = URI("http://example.com")
response = Net::HTTP.get_response(url)
if response.is_a?(Net::HTTPSuccess)
puts "请求成功"
else
puts "请求失败,状态码: #{response.code}"
end这个例子中,我们检查响应是否为成功的状态(HTTP 200 到 299 之间的状态码)。如果不是,我们输出错误信息。
总结
通过以上介绍,你应该对如何使用 Ruby 的 Net::HTTP 库发送 HTTP 请求有了基本的了解。无论是简单的 GET 请求还是复杂的 POST 请求,都可以使用这个强大的库来完成。此外,正确地处理响应和错误也是非常重要的。希望这些示例代码能够帮助你在未来的项目中更好地使用 Net::HTTP。