在本教程中,我们展示了如何使用标准的 Ruby Net :: HTTP 模块。 我们获取数据,发布数据,使用 JSON 并连接到安全的网页。 本教程使用 Sinatra 应用作为几个示例。
超文本传输协议( <abbr>HTTP</abbr> )是用于分布式协作超媒体信息系统的应用协议。 HTTP 是万维网数据通信的基础。
Ruby Net::HTTP
提供了一个丰富的库,可用于构建 HTTP 客户端。
Sinatra
Sinatra 是流行的 Ruby Web 应用框架。 它易于安装和设置。 我们的一些示例还将使用 Sinatra 应用。
我们安装 Sinatra 和 Thin Web 服务器。 如果安装了 Thin,Sinatra 会自动选择默认 WEBrick 服务器上的 Thin。
在第一个目录中,我们有一个main.rb
文件,它是 Sinatra 应用文件。
main.rb
应用对/
路由做出反应。 它将一条简单的消息发送回客户端。
使用ruby main.rb
命令启动应用。 瘦服务器启动; 它在 4567 端口上监听。
使用curl
命令行工具,我们连接到服务器并访问/
路由。 一条消息出现在控制台上。
版本
第一个程序确定库的版本。
version.rb
该脚本确定net/http
是处于 1.1 版还是 1.2 版模式。
在我们的情况下,模式为 1.2。
获取内容
get_print
是一种高级方法,可从目标获取正文并将其输出到标准输出。
get_content.rb
该脚本获取www.something.com
网页的内容。 net/http
设计为与uri
模块紧密配合。
这也需要uri
,因此我们不需要单独要求它。
这是get_content.rb
脚本的输出。
以下程序获取一个小型网页,并剥离其 HTML 标签。
strip_tags.rb
该脚本会剥离www.something.com
网页的 HTML 标签。
一个简单的正则表达式用于剥离 HTML 标记。
该脚本将打印网页的标题和内容。
状态
响应的code
和message
方法给出其状态。
status.rb
我们使用get_response
方法执行三个 HTTP 请求,并检查返回的状态。
使用message
和code
方法检查 HTTP 响应的状态。
200 是对成功的 HTTP 请求的标准响应,404 指示找不到请求的资源,302 指示该资源已临时重定向。
head
方法
head
方法检索文档标题。 标头由字段组成,包括日期,服务器,内容类型或上次修改时间。
head.rb
该示例打印www.something.com
网页的服务器,日期,上次修改时间,内容类型和内容长度。
这是head.rb
程序的输出。
get
方法
get
方法向服务器发出 GET 请求。 GET 方法请求指定资源的表示形式。
main.rb
这是 Sinatra 应用文件。 收到/greet
路由后,它将返回一条消息,其中包含客户端发送的名称。
mget.rb
该脚本将具有值的变量发送到 Sinatra 应用。 该变量直接在 URL 中指定。
这是我们发送到服务器的参数。
我们使用encode_www_form
方法将参数编码到 URL 中。
get
方法将 GET 请求发送到服务器。 它返回打印到控制台的响应。
这是示例的输出。
在瘦服务器的此日志中,我们可以看到参数已编码到 URL 中。
我们可以直接将参数放入 URL 字符串中。
mget2.rb
这是发出 GET 消息的另一种方式。 它基本上与前面的示例相同。
用户代理
在本节中,我们指定用户代理的名称。
main.rb
Sinatra 应用返回客户端发送的用户代理。
agent.rb
该脚本向 Sinatra 应用创建一个简单的 GET 请求。
用户代理在get
方法的第二个参数中指定。
服务器使用我们随请求发送的代理名称进行了响应。
post
方法
post
方法在给定的 URL 上调度 POST 请求,为填写的表单内容提供键/值对。
main.rb
Sinatra 应用在/target
路线上返回问候语。 它从params
哈希中获取值。
mpost.rb
脚本使用具有Peter
值的name
键发送请求。 POST 请求通过Net::HTTP.post_form
方法发出。
这是mpost.rb
脚本的输出。
使用 POST 方法时,不会在请求 URL 中发送该值。
从字典中检索定义
要解析 HTML,我们使用nokogiri
gem。 可以使用sudo gem install nokogiri
命令安装。
get_term.rb
在此脚本中,我们在www.dictionary.com
上找到了术语 cat 的定义。 Nokogiri::HTML
用于解析 HTML 代码。
为了执行搜索,我们在 URL 的末尾附加了该词。
我们使用Nokogiri::HTML
类解析内容。 定义位于<div class="def-content">
标签内。 我们通过删除过多的空白来改善格式。
JSON 格式
<abbr>JSON</abbr> (JavaScript 对象表示法)是一种轻量级的数据交换格式。 人类很容易读写,机器也很容易解析和生成。
如果以前没有安装过,则必须安装json
gem。
main.rb
Sinatra 应用发送 JSON 数据。 它使用to_json
方法完成工作。
parse_json.rb
该示例读取 Sinatra 应用发送的 JSON 数据。
接下来,我们从 Ruby 脚本将 JSON 数据发送到 Sinatra 应用。
main.rb
该应用读取 JSON 数据并发送回带有已解析值的消息。
post_json.rb
该脚本将 JSON 数据发送到 Sinatra 应用并读取其响应。
'application/json'
内容类型必须在请求的标头中指定。
重定向
重定向是将一个 URL 转发到另一个 URL 的过程。 HTTP 响应状态代码 302 用于临时 URL 重定向。
main.rb
在 Sinatra 应用中,我们使用redirect
命令重定向到其他位置。
newpage.html
这是位于public/files
子目录中的newpage.html
文件。
redirect.rb
该脚本访问旧页面并遵循重定向。 请注意,这适用于单个重定向。
标头的位置字段包含文件重定向到的地址。
从日志中,我们可以看到该请求已重定向到新的文件名。 通信包含两个 GET 消息。
证书
basic_auth
方法设置用于领域的名称和密码。 安全领域是一种用于保护 Web 应用资源的机制。
对于此示例,我们需要安装sinatra-basic-auth
gem。
main.rb
在 Sinatra 应用中,我们指定授权逻辑并设置受保护的路由。
credentials.rb
该脚本连接到安全网页; 它提供访问该页面所需的用户名和密码。
使用正确的凭据,credentials.rb
脚本返回受限制的数据。
您可能也会对以下相关教程感兴趣:Ruby Faraday 教程,Ruby Net::HTTP 教程,Ruby HTTPClient 教程,Ruby 教程。