• DoRubyとは
  • お問い合わせ
  • Ruby/Rails
  • Web開発
  • Webマーケティング
  • アピリッツ
  • ライフハック
  • ゲーム制作/開発
  • Railsの小技
  • Rubyの小技
  • Gemの紹介
  • ActiveRecord
  • 初心者向け
  • Java/Scalaテク
  • Unixのあれこれ
  • データベース
  • スマホ開発
  • HTML/CSS/JavaScript
  • デザイン製作
  • インフラ
  • クラウド
  • セキュリティ
  • エディタ
  • バージョン管理
  • その他
  • python
  • アクセス解析
  • Googleアナリティクス
  • Googleデータスタジオ
  • Web広告
  • SEO
  • UI/UX
  • ソーシャルメディア
  • EC開発
  • Webシステム開発
  • コンサルティング
  • Webデザイン
  • ブロックチェーン
  • ゲーム紹介
  • アプリ紹介
  • ASP
  • 風景
  • パソコン
  • ツール
  • ガジェット
  • 仕事術
  • 健康
  • 生活
  • 書評
  • Excel(エクセル)
  • PowerPoint(パワーポイント)
  • ゲームプランニング
  • SpriteStudio
  • マスターデータ入力/作成
  • Unity
  • キャラクターデザイン
  • ゲームシナリオ
  • レベルデザイン
  • ゲーム分析
  • 3DCG
  • イラスト制作
  • CG/アニメーション
  1. ホーム
  2. Web開発
  3. その他
  4. CoCProxyでリクエストを飛ばさずにWebクライアントをテストする
  • 2017-12-04
    • カテゴリ:
    • その他
    • タグ:
    • ひとりAdventCalendar'17

CoCProxyでリクエストを飛ばさずにWebクライアントをテストする

この記事は公開から1年以上が経過しています。情報が古い可能性がありますのでご注意ください。

外部のシステムとの連携をテストしたいけど、気軽にそのシステムのAPIが叩けないとかいうときに役立つTips

CoCProxyとは

簡単に言うと、普段は何もせずリクエストを右から左に受け渡すが、ローカルにそのリクエストのホスト名とパスに相当する場所にファイルを置くと、実際にリモートにリクエストしたフリしてローカルのファイルの内容をレスポンスとして返してくれるプロキシという感じです。

GitHubが流行る前に CodeRepos という公開リポジトリがありそこにアップロードされていた Ruby 製ツールでしたが、現在その派生版として nginx モジュール版と、今回紹介する Node.js 版があるようです。

インストール

node.js 版をインストールは以下のとおり。

$ npm install -g cocproxy

基本的な使い方

適当な場所にディレクトリを用意(たとえば coc_test とする)してそこに移動。

$ mkdir coc_test
$ cd coc_test

リクエスト対象となるホスト名と同じ名前でディレクトリを掘って、その配下に差し替えたいリソースに合わせてファイルを配置する。

$ mkdir www.google.co.jp

まずは普通にアクセスしてみる

$ curl http://www.google.co.jp/index.html
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja"><head> ....

普通に Google から HTML ファイルが返ってくる。

次に、別のターミナルでCoCProxyを立ち上げ、、、、

$ cocproxy
Proxy stand by: http://localhost:8087
Used mock dir : /home/ec2-user/coc_test

今度はProxyを通してアクセスしてみる。

$ curl http://localhost:8087/http://www.google.co.jp/index.html
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja"><head> ....

まだ差し替えるファイルを用意していないので、今度も普通に Google から HTML ファイルが返ってくる。

次は、cocproxy でファイルを差し替えてみる。
以下のように www.google.co.jp/index.html にファイルを用意する。

$ cat > www.google.co.jp/index.html <<EOF
<!doctype html><title>hello</title>Hello CoCProxy.
EOF

先ほどと同じようにproxy経由でリクエストを投げてみる

$ curl http://localhost:8087/http://www.google.co.jp/index.html
<!doctype html><title>hello</title>Hello CoCProxy.

今度は CoCProxy によってファイルの内容に差し替えられたレスポンスが返ってきたことがわかる

RubyのコードからCoCProxy経由でアクセスしてみる

今度は先程と同様の手順を Ruby のコードで確認します。

# test.rb
require 'net/http'

Net::HTTP.start('www.google.co.jp', 80, :ENV) do |http|
  response = http.get('/index.html')
  puts response.body
end

Net::HTTPのドキュメントによると、#new や #start メソッドの第3引数に :ENV を渡すと環境変数 http_proxy が設定されていればそのProxyを経由するとあります。

試しに、最初は環境変数なしで確認します。

$ ruby test.rb
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" ...

普通に Google のコンテンツが返ってきました。
今度は、環境変数http_proxyを設定してみます。

$ export http_proxy=http://localhost:8087
$ ruby test.rb
<!doctype html><title>hello</title>Hello CoCProxy.

今度はローカルで用意したファイルの中身が返ってきました。

CoCProxy をProxyとして利用することでリモートに手を加えることなくレスポンスを変更することができることがわかりました。

まとめ

  • CoCProxy を使えばクライアント側のコードを変更せずにProxyでファイルを差し替えることができる
  • RubyのコードからProxyを利用する場合、そのライブラリに応じた設定が必要な場合がある
    • 標準ライブラリ Net::HTTP の場合、.new, .start メソッドの第3引数に :ENV を設定しているとき http_proxy 環境変数に値を設定されている場合そのProxyを経由してアクセスする

  • 82 views
    • Tweet
    • このエントリーをはてなブックマークに追加

この記事を書いた人
nakamatsu
仕事ではRubyでサーバサイド/Node.jsでServerlessアプリケーション/AWSインフラ・DevOpsなど。 趣味で Alexa スキル作ったりしてます。 「俺のメモ」シリーズは DoRuby をメモ帳代わりに使う実験。 記事の内容についてのご連絡は 【e-mail: nakamatsu "at" appirits.com】 まで、お願いします。

「いいね!」するとDoRubyの最新記事を受け取ることができます。

Facebook

Twitterから最新記事を受け取るならこちら

Follow @doruby

Feedlyから最新記事を受け取るならこちら

follow us in feedly

おすすめの記事
  • 2,260 views
  • 2016-07-27
リニューアルをしたDoRubyの3つの目的
  • 2,118 views
  • 2016-08-15
ビット演算でフラグを管理する
  • 1,741 views
  • 2017-04-24
アピリッツの新卒合宿2017

カテゴリ

Ruby/RailsRailsの小技Rubyの小技Gemの紹介ActiveRecord初心者向けWeb開発Java/ScalaテクUnixのあれこれデータベーススマホ開発HTML/CSS/JavaScriptデザイン製作インフラクラウドセキュリティエディタバージョン管理その他pythonWebマーケティングアクセス解析GoogleアナリティクスGoogleデータスタジオWeb広告SEOUI/UXソーシャルメディアアピリッツEC開発Webシステム開発コンサルティングWebデザインブロックチェーンゲーム紹介アプリ紹介ASP風景ライフハックパソコンツールガジェット仕事術健康生活書評Excel(エクセル)PowerPoint(パワーポイント)ゲーム制作/開発ゲームプランニングSpriteStudioマスターデータ入力/作成Unityキャラクターデザインゲームシナリオレベルデザインゲーム分析3DCGイラスト制作CG/アニメーション

    人気の記事
    最近の記事
    • 3,501 views
    • 2020-04-02
    Kali Linux 2020.2 導入と日本語化
    • 802 views
    • 2020-03-06
    rack-lineprofを改造して管理画面からファイル指定&ログ追跡出来るように
    • 778 views
    • 2020-03-05
    FactoryBot と Gimei を使って架空のユーザを作る
    • 579 views
    • 2020-02-04
    ActionCable実装しようwith webpack
    • 510 views
    • 2020-01-27
    この頃のプルリクに対するレビュー
    Facebook

      サイト情報
      • DoRubyとは
      • 株式会社アピリッツ

      ソーシャルアカウント
      • Facebook
      • Twitter

      企業情報
      • 会社概要
      • 採用情報
      • お問い合わせ
      サービス製品
      • レコメンドASP
      • サイト内検索ASP「Advantage Search」
      • オープンソースECサイト構築パッケージ「エレコマ」
      • 受注・在庫・商品情報一元管理「モールコネクター」
      • セキュリティ診断サービス
      • Googleアナリティクスセミナー

      Copyright © Appirits All Rights Reserved.