# Ruby

> 使用 Proxyman Automatic Setup 抓取 Ruby 脚本和服务的 HTTP/HTTPS 流量，兼容 http、net/http、net/https、httparty 和 faraday。

## 1. 全新自动方案（v4.7.0 或更高版本）✅ {#1-new-automatic-solution-v470-or-later-}

Proxyman v4.7.0 或更高版本可以一键抓取 Ruby 的 HTTP/HTTPS 流量。

* 一键方案：无需手动设置 HTTP Proxy，也无需手动信任自签名证书。
* 支持多种 Ruby 库：http、net/http、net/https、httparty 和 faraday。

### 使用方法： {#how-to-use}

1. 打开 Proxyman -> Setup Menu -> Automatic Setup
2. 点击 “Open New Terminal”
3. 如有需要，请允许 AppleScript 的权限请求
4. 会打开一个新的 Terminal 窗口，在其中启动 Ruby 后端服务或运行脚本，Proxyman 会自动抓取所有流量
5. 完成 ✅

![Proxyman Automatic Setup 窗口，其中的 Open New Terminal 按钮可以抓取 net/http 等 Ruby 库的流量](https://proxyman.com/docs/assets/proxyman-automatic-setup-window.jpg)

_抓取 Ruby 流量_

## 2. 旧方案（不推荐） {#2-old-solution-not-recommended}

### 1. 为 Ruby 设置 HTTP Proxy {#1-set-http-proxy-to-ruby}

如果存在 `http_proxy` 环境变量，Net::HTTP 会自动使用其中的代理。 

因此可以这样设置：

```bash
ENV['http_proxy'] = 'http://127.0.0.1:9090' # your http://address:port here
```

这样，Net::HTTP 默认会将所有请求都通过该代理发送。

参考：[https://stackoverflow.com/questions/15792999/how-to-set-a-proxy-in-rubys-net-http](https://stackoverflow.com/questions/15792999/how-to-set-a-proxy-in-rubys-net-http)

### 2. 在 Ruby 中安装 Proxyman 证书 {#2-install-proxyman-certificate-on-ruby}

默认情况下，macOS 上的 **Ruby** 可能不信任 Proxyman 的自签名证书，因此在拦截 HTTPS 流量时可能会出现 SSL 错误。

你可以通过 `SSL_CERT_FILE` 环境变量告诉 Ruby 使用 Proxyman 证书。

```bash
$ env SSL_CERT_FILE=~/.proxyman/proxyman-ca.pem ruby my_script.rb
```

> **备注:** 较新版本的 Proxyman 将证书存放在 `~/Library/Application Support/com.proxyman.NSProxy/app-data/proxyman-ca.pem`。如果你的 Mac 上不存在 `~/.proxyman/proxyman-ca.pem`，请改用该路径，或者从 Certificate 菜单 -> Export -> Root Certificate as PEM 导出证书。

## 了解更多 {#learn-more}

* [抓取 Ruby（net::http 或 http gem）脚本的 HTTP/HTTPS 请求](https://proxyman.com/posts/2023-05-09-Capture-HTTP-HTTPS-Request-Response-From-Ruby-Net-HTTP-library)
* [使用 Proxyman 抓取 Ruby 的 HTTP/HTTPS 流量](https://proxyman.com/ruby)（Proxyman 官网）
