Pythonスクリプトでプロキシを利用する

2021.01.19

手元のMacでPythonスクリプトをプロキシを使って実行する機会がありましたので、手順を共有します。結論としては、環境変数にプロキシサーバーをセットすることでプロキシを利用できました。

検証用のプロキシサーバーは以下を参考にAmazon Linux 2にSquidをインストールしました。

Squidで検証用のプロキシを作ってみた

テストコード

以下をtest.pyとして保存します。urlに指定したページに接続し、ステータスコードを表示します。

import urllib.request

url = 'https://www.google.com/'

with urllib.request.urlopen(url) as response:
    print(response.getcode())

実行結果は以下のようになります。正常に接続できる場合はhttpステータスコード200が表示されます。

$ python test.py
200
$

私の環境では、CERTIFICATE_VERIFY_FAILEDのエラーがでたので、こちらの記事を参考にSSL_CERT_FILEを設定しました。

環境変数を指定し、スクリプトを実行する

http_proxyとhttps_proxyにプロキシサーバーの情報をセットします。「http://proxyserver-ip:port/」は実際のプロキシサーバーのIPアドレスとポート番号に置き換えます。

$ python --version
Python 3.9.1
$ export http_proxy=http://proxyserver-ip:port/
$ export https_proxy=http://proxyserver-ip:port/
$ python test.py
200
$

Amazon Linux2のSquidの場合、/var/log/squid/access.logに以下のようなログが残ります。

1611039195.648    304 手元の環境のIPアドレス TCP_TUNNEL/200 18260 CONNECT www.google.com:443 - HIER_DIRECT/172.217.26.4 -

以下のようにtest.py内で環境変数を上書きすることもできました。

import urllib.request
import os
os.environ['http_proxy'] = 'http://proxyserver-ip:port/'
os.environ['https_proxy'] = 'http://proxyserver-ip:port/'

url = 'https://www.google.com/'

with urllib.request.urlopen(url) as response:
    print(response.getcode())

おわりに

pythonスクリプトをプロキシを使って実行する方法を紹介しました。ターミナルで環境変数をセットするか、スクリプト内で環境変数をセットすることでプロキシを利用できました。

参考