在本教程中,我们展示了如何使用 Ruby Faraday 模块。 我们获取数据,发布数据,使用 JSON 并连接到安全的网页。 我们还创建了一个自定义的法拉第中间件。 本教程使用 Sinatra 应用作为几个示例。
超文本传输协议( <abbr>HTTP</abbr> )是用于分布式协作超媒体信息系统的应用协议。 HTTP 是万维网数据通信的基础。
Ruby Faraday
是一个简单,灵活的 HTTP 客户端库,支持多个后端。 法拉第也是一种中间件。
该模块通过sudo gem install faraday
命令安装。
Sinatra
Sinatra 是流行的 Ruby Web 应用框架。 它易于安装和设置。 我们的一些示例还将使用 Sinatra 应用。
我们安装 Sinatra 和 Thin Web 服务器。 如果安装了 Thin,Sinatra 会自动选择默认 WEBrick 服务器上的 Thin。
在第一个目录中,我们有一个main.rb
文件,它是 Sinatra 应用文件。
main.rb
应用对/
路由做出反应。 它将一条简单的消息发送回客户端。
使用ruby main.rb
命令启动应用。 瘦服务器启动; 它在 4567 端口上监听。
使用curl
命令行工具,我们连接到服务器并访问/
路由。 一条消息出现在控制台上。
版本
第一个 Faraday 程序将打印库和 Ruby 语言的版本。
version.rb
这两个常数提供了库的版本号和默认的法拉第适配器。
这是字符串的示例输出。
获取内容
get
方法获取由给定 URL 标识的文档。
get_content.rb
该脚本获取www.something.com
网页的内容。
这是get_content.rb
脚本的输出。
以下程序获取一个小型网页,并剥离其 HTML 标签。
strip_tags.rb
该脚本会剥离www.something.com
网页的 HTML 标签。
一个简单的正则表达式用于剥离 HTML 标记。
该脚本将打印网页的标题和内容。
状态
Faraday::Response
的status
方法返回响应的 HTTP 状态代码。
status.rb
我们使用get
方法执行三个 HTTP 请求,并检查返回状态。
使用status
方法检查 HTTP 响应的状态。
success?
方法指示状态代码是否成功。
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 中指定。
这是示例的输出。
在瘦服务器的此日志中,我们可以看到参数已编码到 URL 中。
get
方法采用第二个参数,我们可以在其中指定查询参数。
mget2.rb
这是发出 GET 消息的另一种方式。
用户代理
在本节中,我们指定用户代理的名称。
main.rb
Sinatra 应用返回客户端发送的用户代理。
agent.rb
该脚本向 Sinatra 应用创建一个简单的 GET 请求。
用户代理在请求的headers
属性中指定。
服务器使用我们随请求发送的代理名称进行了响应。
post
方法
post
方法在给定的 URL 上调度 POST 请求,为填写的表单内容提供键/值对。
main.rb
Sinatra 应用在/target
路线上返回问候语。 它从params
哈希中获取值。
mpost.rb
脚本使用具有Jan
值的name
键发送请求。 POST 请求通过post
方法发出。
这是mpost.rb
脚本的输出。
使用 POST 方法时,不会在请求 URL 中发送该值。
从字典中检索定义
要解析 HTML,我们使用nokogiri
gem。 可以使用sudo gem install nokogiri
命令安装。
get_term.rb
在此脚本中,我们在www.dictionary.com
上找到了术语狗的定义。 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'
内容类型。
证书
basic_auth
方法设置用于领域的名称和密码。 安全领域是一种用于保护 Web 应用资源的机制。
对于此示例,我们需要安装sinatra-basic-auth
gem。
main.rb
在 Sinatra 应用中,我们指定授权逻辑并设置受保护的路由。
credentials.rb
该脚本连接到安全网页; 它提供访问该页面所需的用户名和密码。
使用正确的凭据,credentials.rb
脚本返回受限制的数据。
Faraday 中间件
中间件是连接两个原本独立的应用的软件。 除了作为 HTTP 客户端之外,Faraday 还充当中间件。 这个概念与 Ruby Rack 非常相似。
Faraday::Connection
包含一个中间件列表。 法拉第中间件传递有请求和响应信息的env
哈希。 中间件可以在执行请求之前和之后操纵此信息。
重定向
重定向是将一个 URL 转发到另一个 URL 的过程。 HTTP 响应状态代码 302 用于临时 URL 重定向。
重定向是在法拉第中间件模块之一中实现的。
这些模块在faraday_middleware
gem 中可用。
main.rb
在 Sinatra 应用中,我们使用redirect
命令重定向到其他位置。
newpage.html
这是位于public/files
子目录中的newpage.html
文件。
redirect.rb
该脚本访问旧页面并遵循重定向。
从日志中,我们可以看到该请求已重定向到新的文件名。 通信包含两个 GET 消息。
MyLogger
在以下示例中,我们创建了自己的小型中间件。 它实现了请求和响应日志记录。
main.rb
这是一个 Sinatra 应用,它向客户端发送问候语。
logger.rb
在这里,我们创建一个中间件,该中间件实现了对控制台的日志记录。
中间件必须实现call
方法。 它执行用于请求和响应的方法。
生成请求后,将调用on_request
方法。 该方法记录阶段,请求方法和 URL。
MyLogger
中间件通过use
方法添加到堆栈中。 当连接对象执行请求时,它将创建一个共享的env
哈希,将外部中间件包装在每个内部中间件周围,并执行 call 方法。
一条消息发送到 Sinatra 应用。 该请求和响应被记录到终端。
您可能也会对以下相关教程感兴趣:Ruby Faraday 教程,Ruby Net::HTTP 教程,Ruby HTTPClient 教程,Ruby 教程。