在本教程中,我们展示了如何使用 Ruby HTTPClient 模块。 我们获取数据,发布数据,使用 cookie 并连接到安全的网页。
超文本传输协议( <abbr>HTTP</abbr> )是用于分布式协作超媒体信息系统的应用协议。 HTTP 是万维网数据通信的基础。
Ruby HTTPClient
提供了用于通过 HTTP 访问 Web 资源的方法。 它提供了 Ruby 中的 libwww-perl(LWP)的功能。
该模块通过sudo gem install httpclient
命令安装。
我们在本地主机上运行 nginx Web 服务器。 我们的一些示例将连接到本地运行的 nginx 服务器上的 PHP 脚本。
版本
第一个程序输出库和 Ruby 语言的版本。
version.rb
这三个常数提供了库和 Ruby 版本号。
这是示例的示例输出。
get_content 函数
get_content
是一种用于获取由给定 URL 标识的文档的高级方法。
get_content.rb
该脚本获取www.something.com
网页的内容。
get_content
方法将结果作为一个字符串返回。
这是get_content.rb
脚本的输出。
以下程序获取一个小型网页,并剥离其 HTML 标签。
strip_tags.rb
该脚本会剥离www.something.com
网页的 HTML 标签。
一个简单的正则表达式用于剥离 HTML 标记。 在这种情况下,get_content
方法以字符串块的形式返回内容。
该脚本将打印网页的标题和内容。
请求
HTTP 请求是从客户端发送到浏览器的消息,以检索某些信息或采取某些措施。
HTTPClient's
request
方法创建一个新请求。 请注意,HTTPClient
类具有诸如get
,post
或put
之类的方法,这些方法为我们节省了一些输入。
create_request.rb
该示例创建一个 GET 请求并将其发送到http://www.something.com
。
我们创建一个请求方法和 URL。
使用request
方法发出请求。
消息响应的body
属性包含消息的正文。
这是示例的输出。
状态
HTTP::Message
表示 HTTP 请求或响应。 其status
方法返回响应的 HTTP 状态代码。
status.rb
我们使用get
方法执行三个 HTTP 请求,并检查返回的状态。
HTTP::Status::successful?
方法指示状态代码是否成功。
200 是对成功的 HTTP 请求的标准响应,404 指示找不到请求的资源,302 指示该资源已临时重定向。
head
方法
head
方法检索文档标题。 标头由字段组成,包括日期,服务器,内容类型或上次修改时间。
head.rb
该示例打印服务器,www.something.com
网页的上次修改时间,内容类型和内容长度。
这是head.rb
程序的输出。
get
方法
get
方法向服务器发出 GET 请求。 GET 方法请求指定资源的表示形式。
greet.php
在/usr/share/nginx/html/
目录中,有此greet.php
文件。 该脚本返回name
变量的值,该值是从客户端检索到的。 htmlspecialchars()
函数将特殊字符转换为 HTML 实体; 例如 &至&放大器。
mget.rb
该脚本将带有值的变量发送到服务器上的 PHP 脚本。 该变量直接在 URL 中指定。
This is the output of the example.
我们检查了 nginx 访问日志。
get
方法采用第二个参数,我们可以在其中指定查询参数。
mget2.rb
该示例与上一个示例基本相同。
重定向
重定向是将一个 URL 转发到另一个 URL 的过程。 HTTP 响应状态代码 301“永久移动”用于永久 URL 重定向。
将这些行添加到位于 Debian 上/etc/nginx/sites-available/default
的 Nginx 配置文件中。
编辑完文件后,我们必须重新启动 nginx 才能应用更改。
newpage.html
这是位于 nginx 文档根目录中的newpage.html
文件。
redirect.rb
该脚本访问旧页面并遵循重定向。
:follow_redirect
选项用于遵循重定向。
从access.log
文件中可以看到,该请求已重定向到新的文件名。 通信包含两个 GET 消息。
用户代理
在本节中,我们指定用户代理的名称。
agent.php
在 nginx 文档根目录中,我们有这个简单的 PHP 文件。 它返回用户代理的名称。
agent.rb
该脚本为agent.php
脚本创建一个简单的 GET 请求。
在HTTPClient
的构造函数中,我们指定用户代理。
服务器使用我们随请求发送的代理名称进行了响应。
post
方法
post
方法在给定的 URL 上调度 POST 请求,为填写的表单内容提供键/值对。
target.php
在本地 Web 服务器上,我们有此target.php
文件。 它只是将过帐的值打印回客户。
post_value.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">
标签内。 我们通过删除过多的空白来改善格式。
cookie
HTTP cookie 是从网站发送并在用户浏览时存储在用户的 Web 浏览器或程序数据子文件夹中的一小段数据。 当用户访问网页时,浏览器/程序会将 cookie 发送回服务器,以通知用户先前的活动。 Cookies 的有效期限为有效期。
接收到 HTTP 请求时,服务器可以发送带有响应的Set-Cookie
标头。 之后,cookie 值将以 Cookie HTTP 标头的形式与对同一服务器的所有请求一起发送。
cookies.php
该 PHP 文件读取 cookie。 如果 cookie 不存在,则会创建它。 cookie 存储用户的主题。
send_cookie.rb
我们创建一个自定义 cookie,并将其发送到cookies.php
页面。
使用WebAgent::Cookie
类创建一个 cookie。
cookie 被添加到 cookie 管理器中。
接下来,我们将读取 cookie 并将其本地存储在文件中。
read_cookie.rb
该脚本从 PHP 文件读取 cookie,并将其本地存储在cookie.dat
文件中。
最后,我们读取存储的 cookie,并将其发送到同一 PHP 文件。
send_cookie2.rb
HTTPClient::CookieManager
用于读取 cookie。
我们运行脚本。
证书
客户端的set_auth
方法设置用于领域的名称和密码。 安全领域是一种用于保护 Web 应用资源的机制。
我们使用htpasswd
工具创建用于基本 HTTP 身份验证的用户名和密码。
在 nginx /etc/nginx/sites-available/default
配置文件中,我们创建一个安全页面。 领域的名称是“限制区域”。
index.html
在/usr/share/nginx/html/secure
目录中,我们有这个 HTML 文件。
credentials.rb
该脚本连接到安全网页; 它提供访问该页面所需的用户名和密码。
使用正确的凭据,credentials.rb
脚本返回受保护的页面。
您可能也会对以下相关教程感兴趣:Ruby Faraday 教程,Ruby Net::HTTP 教程,Ruby HTTPClient 教程,Ruby 教程。