【Python】プロキシ経由でAPI通信する【Tor】

2024年2月17日Python,Selenium

処理概要

プロキシ(Tor)経由でAPI通信を実行する


処理内容

  1. Torを起動する
  2. プロキシを使用せずAPIリクエストを実行する
  3. プロキシを使用して同じAPIリクエストを実行する

対象API

Torの事前準備

  • Windows版Torを使用する
  • Torの公式サイトからエキスパートバンドルファイルをダウンロードして任意のフォルダに展開しておく

コード

import requests
import subprocess

# Torのデフォルトポート
proxies = {
    'http':'socks5://127.0.0.1:9050',
    'https':'socks5://127.0.0.1:9050'
}

# Torを起動する
subprocess.Popen(['path\to\tor.exe'], shell=True, text=True)

# プロキシを使用せずIPアドレス表示のAPIを実行する
res = requests.get('https://ipinfo.io')
print(res.json())

# プロキシを使用して再度実行する
res_proxy = requests.get('https://ipinfo.io', proxies=proxies)
print(res_proxy.json())

プロキシ使用前の実行結果(一部情報を伏せています)

{'ip': '***.***.***.***', 'hostname': '*********.tokynt01.ap.so-net.ne.jp', 'city': 'Tokyo', 'region': 'Tokyo', 'country': 'JP', 'loc': '35.6892,139.6726', 'org': 'AS2527 Sony Network Communications Inc.', 'postal': '164-0013', 'timezone': 'Asia/Tokyo', 'readme': 'https://ipinfo.io/missingauth'}

プロキシ使用後の実行結果

{'ip': '185.230.163.237', 'hostname': '106d0201.cus13669.vps.st-srv.eu', 'city': 'Frankfurt am Main', 'region': 'Hesse', 'country': 'DE', 'loc': '50.1155,8.6842', 'org': 'AS48314 Michael Sebastian Schinzel trading as IP-Projects GmbH & Co. KG', 'postal': '60306', 'timezone': 'Europe/Berlin', 'readme': 'https://ipinfo.io/missingauth'}

1回目とは異なるIPアドレスが表示されている


依存関係エラーの対応方法

requests.exceptions.InvalidSchema: Missing dependencies for SOCKS support.

  • 上記のエラーはrequestsライブラリがSOCKSプロキシのサポートに必要な依存関係を満たしていない場合に発生する
  • 解決策の一つとしてrequestsライブラリにSOCKSサポートを追加するパッケージをインストールする

対応手順

  1. requestsrequests[socks] パッケージをアンインストールする

    pip uninstall requests requests[socks]
  2. requestsrequests[socks]PySocks パッケージを再インストールする

    pip install requests requests[socks] PySocks
    • PySocksはSOCKSプロキシのサポートを提供するための補助パッケージ