rooterエンジニアのtoyamaです。

みなさんは大学内や会社内など限られた場所からしか見れないページを自宅から見たいと思ったことはないでしょうか?この方法として、すでに大学や会社のネットに接続されているパソコンをリモートデスクトップする方法や大学内や会社内のサーバーを経由する方法などがあります。

今回はその中でも大学内や会社内のサーバーを経由する方法、つまりプロキシを変えてネットに接続する方法をご紹介します。

プロキシとは

プロキシとは、インターネットに接続する際、高速なアクセスや安全な通信を確保するための中継サーバ(プロキシサーバ)のことを指します。インターネットに接続する際、このプロキシサーバを変えることでIPアドレスを変更することができます。この方法により、大学内や会社内のプロキシサーバーを経由することで、本来はそこでしか見れないページも見れるようになります。

Google Chrome

Google Chromeの設定からプロキシの設定を選択すると、パソコン全体のネット接続設定の画面を開いてしまいます。ここからでも設定できますが、Chrome以外に通信していた場合、この通信のプロキシまで変わってしまいます。ここではChromeのプロキシだけ変える方法をご紹介します。

  • Windowsでのプロキシ変更方法

    1. Windowsボタン + R を押して、「ファイル名を指定して実行」を開く
    2. 次のコマンドを実行してChromeを起動(以下http://proxy.example.com:8000をサンプルのプロキシサーバとします。) chrome --proxy-server=http://proxy.example.com:8000

    3. http://ifconfig.ioでIPアドレスを確認、プロキシサーバのIPになっていれば成功

  • Macのでプロキシ変更方法

    1. コマンドラインから次のコマンドを実行してChromeを起動 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --proxy-server=http://proxy.example.com:8000

    2. http://ifconfig.ioでIPアドレスを確認、プロキシサーバのIPになっていれば成功

  • Ubuntu(Linux)でのプロキシ変更方法

    1. コマンドラインから次のコマンドを実行してChromeを起動 google-chrome --proxy-server=http://proxy.example.com:8000

    2. http://ifconfig.ioでIPアドレスを確認、プロキシサーバのIPになっていれば成功

以上がChromeのみプロキシを変更する方法になります。 以下ではおまけとして、curlやseleniumでのプロキシ設定方法をご紹介します。

curl

curlコマンドで任意のプロキシサーバーを経由するには次のようなオプションになります。

$ curl -x http://proxy.example.com:8000 'https://ifconfig.io'

nethttp

nethttpでプロキシを設定する方法は次のようになります。 Net::HTTPに続いてProxy()メソッド内でプロキシの設定を行います。

require 'net/http'
require 'uri'

proxy_host = 'http://proxy.example.com'
proxy_port = 8000

uri = URI.parse("http://ifconfig.io")
response = Net::HTTP.Proxy(proxy_host, proxy_port).get_response(uri)

openuri

open-uriではopenメソッド内にプロキシの設定をhashで行います。

require 'open-uri'

p OpenURI.open_uri('http://ifconfig.io', {:proxy => 'http://proxy.example.com:8000'}).read

selenium

seleniumでは、chromeOptionsでプロキシ設定を行えます。

require 'selenium-webdriver'

user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => {args: ["--user-agent=#{user_agent}", "--proxy-server=http://proxy.example.com:8000"]})
session = Selenium::WebDriver.for :chrome, desired_capabilities: caps
session.get "http://ifconfig.io"

mechanize

mechanizeではset_proxyメソッドで、プロキシを設定することができます。

require 'mechanize'

agent = Mechanize.new
agent.set_proxy('http://proxy.example.com', 8080)
page = agent.get('http://ifconfig.io')
p page.search('body > main > div:nth-child(1) > ul > li:nth-child(1) > div.col-sm-9')

まとめ

以上がプロキシを変えてネットに接続する方法になります。

クライアント様の自社サイト上コンテンツのクローリングを承ることもよくありますが、弊社のクローラーのみクローリングを許可するために、アクセス元のIPアドレスで制限を設けられることもあります。その場合にはプロキシサーバーのIPアドレスをアクセス元として許可して頂き、クローラーはプロキシサーバーを経由してクローリングを行うと複数台のクローラーを扱う場合に運用上楽をできたりします。

ご参考になれば幸いです。