[Ruby] open-uriでのプロキシやユーザーエージェント(UA)の設定方法
Rubyのgem「open-uri」でプロキシ(proxy)やユーザーエージェント(user-agent: UA)の設定をしてhttpにアクセスしたいときの使い方のメモ。
プロキシを設定する
URI::readやopenを使う場合は、proxyキーワード引数にプロキシサーバーのURIを渡す。
プロキシサーバーURIは「http://[user_name]:[password]@[address]:[port]」の形式で記述する。
例えば、プロキシサーバーのaddressがhttp://proxy.hoge, ユーザー名がfuga, パスワードがbarでポートが8080の場合は「http://fuga:bar@proxy.hoge:8080」となる。
認証が必要ない場合は「http://[address]:[port]」(http://proxy.hoge:8080)となり、更にポートの指定も不要な場合は単に「http://[address]」(http://proxy.hoge)となる。
1 2 3 4 5 6 7 8 9 |
require "open-uri" prxy_svr=URI::parse("http://[user_name]:[password]@[address]:[port]") # 設定したいプロキシサーバー url=URI::parse("http://hogehoge.com") # 読み込みたいURL # URI::readの場合 data=url.read(proxy:prxy_svr) # openの場合 data=open(url,proxy:prxy_svr) |
ユーザーエージェント(UA)を設定する
URI::readやopen使用時にUAを設定したいことはたまにある。例えばWebページにアクセスしたいときにUAを設定しないと接続を拒否るサイト(乃木坂46の公式サイトなど)があり、その対策で使ったりする。
URI::readやopen使用時にUAを設定したい時には”user-agent”(文字列)キーワードに設定したいUA(文字列)を設定する。
キーワードの”user-agent”はシンボルではなく、文字列であることに注意(なぜそういう仕様かは不明)。
UAの文字列は好きに設定できる。ChromeやFirefoxなどの現存のものでもよいし適当な文字列を割り当てることもできる。
1 2 3 4 5 6 7 8 9 |
require "open-uri" url=URI::parse("http://hogehoge.com") # 読み込みたいURL ua="happy" # UAを"happy"にする # URI::readの場合 data=url.read("user-agent"=>ua) # data=url.read("user-agent":ua)などはNG # openの場合 data=open(url,"user-agent"=>ua) # data=open(url,"user-agent":ua)などはNG |
当然、プロキシ設定とUA設定は同時に行うことができ、data=url.read(proxy:prxy_svr,"user-agent"=>ua)
のように使うことができる。
マルチバイト文字(かな、漢字など)が含まれるURLのパース
例えば、Wikipediaのページ「https://ja.wikipedia.org/wiki/カラス」をURI::parseしようとすると”URI must be ascii only”(URI::InvalidURIError)と怒られてしまう。
マルチバイト文字はasciiに変換して、「https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%A9%E3%82%B9」にする必要がある。
その方法を提供しているのが、URI::encodeメソッドである。
上記の例だと、URI::encode(“https://ja.wikipedia.org/wiki/カラス”)で「https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%A9%E3%82%B9」になる。
同じカテゴリー(技術メモ)の他の記事を表示
全記事を表示
タグ: Ruby, Web, プログラミング