技術メモ

後で同じ状況が起こった時に思い出せるように技術的なちょっとしたことをメモする。ベストな解ではない。



[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)となる。





 

ユーザーエージェント(UA)を設定する

URI::readやopen使用時にUAを設定したいことはたまにある。例えばWebページにアクセスしたいときにUAを設定しないと接続を拒否るサイト(乃木坂46の公式サイトなど)があり、その対策で使ったりする。
URI::readやopen使用時にUAを設定したい時には”user-agent”(文字列)キーワードに設定したいUA(文字列)を設定する。
キーワードの”user-agent”はシンボルではなく、文字列であることに注意(なぜそういう仕様かは不明)。
UAの文字列は好きに設定できる。ChromeやFirefoxなどの現存のものでもよいし適当な文字列を割り当てることもできる。

当然、プロキシ設定と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」になる。



タグ: , ,
投稿日: 2018年7月18日





コメントを残す

回答をお約束することは出来ませんので予めご了承ください。
コメントは承認されると表示されるようになります。
コメントを送信する前に「私はロボットではありません」にチェックを入れて下さい。