返回

Ruby 程序发送基于 HTTP 协议的请求的简单示例

电脑技巧

Ruby 中的 HTTP 请求:一个初学者指南

介绍

Hypertext Transfer Protocol (HTTP) 是互联网上最普遍使用的协议,用于在客户端和服务器之间传输数据。Ruby 提供了许多库来帮助你发送 HTTP 请求,其中最流行的是 net/http 库。

本文将深入探讨如何使用 net/http 库发送各种 HTTP 请求,并处理服务器响应。我们将从最基本的 GET 请求开始,逐步介绍 POST、PUT 和 DELETE 请求,并指导你了解如何获取服务器返回的响应。

GET 请求

GET 请求用于从服务器检索数据。它是最简单的 HTTP 请求类型。例如,如果你想从谷歌主页获取数据,可以使用以下代码:

require 'net/http'

uri = URI('https://www.google.com')
response = Net::HTTP.get_response(uri)

puts response.body

运行代码后,你会看到谷歌主页的 HTML 代码。

POST 请求

POST 请求用于向服务器发送数据。例如,如果你想向服务器提交表单,可以使用以下代码:

require 'net/http'
require 'uri'

uri = URI('https://www.example.com/submit_form.php')
request = Net::HTTP::Post.new(uri)
request.set_form_data({ 'name' => 'John Doe', 'email' => 'johndoe@example.com' })

response = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(request)
end

puts response.body

运行代码后,你会看到服务器返回的响应。

PUT 请求

PUT 请求用于更新服务器上的数据。例如,如果你想更新自己的个人资料,可以使用以下代码:

require 'net/http'
require 'uri'

uri = URI('https://www.example.com/update_profile.php')
request = Net::HTTP::Put.new(uri)
request.body = { 'name' => 'John Doe', 'email' => 'johndoe@example.com' }.to_json

response = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(request)
end

puts response.body

运行代码后,你会看到服务器返回的响应。

DELETE 请求

DELETE 请求用于从服务器中删除数据。例如,如果你想删除自己的个人资料,可以使用以下代码:

require 'net/http'
require 'uri'

uri = URI('https://www.example.com/delete_profile.php')
request = Net::HTTP::Delete.new(uri)

response = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(request)
end

puts response.body

运行代码后,你会看到服务器返回的响应。

处理服务器响应

服务器返回的响应是一个 Net::HTTPResponse 对象,包含服务器响应状态码、响应头和响应体。

  • 获取响应状态码:response.code
  • 获取响应头:response.headers
  • 获取响应体:response.body

总结

本指南介绍了使用 Ruby 发送基于 HTTP 协议的请求。我们探讨了 GET、POST、PUT 和 DELETE 请求,并学习了如何处理服务器响应。掌握这些知识将使你能够在 Ruby 项目中与远程服务器进行交互。

常见问题解答

  1. 如何处理 HTTP 错误?
    使用 rescue Net::HTTPError => e 捕获错误并相应地处理。

  2. 如何设置请求头?
    使用 request['header_name'] = 'header_value' 设置请求头。

  3. 如何处理重定向?
    Net::HTTP 会自动处理重定向。

  4. 如何使用 HTTPS 发送请求?
    使用 Net::HTTP::start(uri.hostname, uri.port, use_ssl: true)

  5. 推荐哪些额外的 Ruby HTTP 库?
    rest-clientfaradaytyphoeus