AIOHTTPのプロキシ設定方法

このガイドではAIOHTTPのプロキシ設定方法を段階的に説明
3 min read
How to Set Proxy in AIOHTTP

このAIOHTTPプロキシ統合ガイドを読み終える頃には、次のことを理解いただけます。

  • AIOHTTPとは何か。
  • プロキシを使うべき理由。
  • AIOHTTPのHTTPプロシキ、HTTPSプロシキ、SOCKSプロキシの設定方法。
  • プロキシ認証、SSL証明書エラー、IP ローテーションなどの対処方法

AIOHTTPとは何ですか?

AIOHTTP は、周知のオープンソースであるPythonの非同期HTTPクライアント/サーバーフレームワークです。主な機能は以下のとおりです。

  • HTTPプロトコルのクライアントとサーバー両方をサポート。
  • クライアントとサーバー両方のWebsocketをサポート。
  • ウェブサーバーにミドルウェアとプラガブルなルーティングを提供。

このチュートリアルの焦点は、asyncio上でHTTP リクエストを実行するHTTPクライアントとしての機能です。AIOHTTPは、複数の同時リクエストを効率的に処理する必要があるスクリプト作成に非常に適しています。

この記事を書いている時点で、AIOHTTPはGitHubのスター数が1万4000 個以上になっています。

AIOHTTPプロキシが必要な理由は何ですか?

AIOHTTPでプロキシを使用する理由はオンラインIDを保護するためです。リクエストを プロキシサーバーにルーティングすることで発信者のIPと場所を非表示にし、リクエストが発信者ではなくプロキシサーバーからの発信されたと送信先サイトに認識させることができます。つまり、これにより発信者の特定と追跡がさらに困難になり、IP接続禁止や地域制限を回避しつつ、オンライン業務の機密性が高まります。

ここで留意すべきは リクエストでも同じ結果が得られることです。これは リクエストプロキシ統合チュートリアルで説明していきます

AIOHTTPプロキシでのプロキシ設定

段階的に説明するこのセクションでは、AIOHTTPでHTTP、HTTPS、SOCKSのプロキシー設定方法を紹介します。

AIOHTTPの前提条件

ここでは、マシンにPythonをインストール済で、仮想環境が整ったPythonプロジェクトがあることを前提とします。次のコマンドでAIOHTTPとその推奨される依存関係をインストールします。

pip install aiohttp[speedups]

これでaiohttpがプロジェクトの依存関係に追加されます。

Pythonのスクリプトファイルを開き、aiohhttpインポートを追加します。

import aiohttp

aiohttpをasync/await構文で作動させるには、asyncioを使用する必要があります。そのため、このライブラリもインポートして、基本的なasync main ()関数を設定してください。


import aiohttp
import aiohttp

import asyncio

async def main():
  # aiohttp logic...

asyncio.run(main())

完璧です!これで、AIOHTTPプロキシの統合ロジックを作成する準備が整いました。

プロキシの前提条件

プロキシをAIOHTTPに統合する方法に行く前に、プロキシURLについての理解を深めましょう。

これは、AIOHTTPでプロキシサーバーに接続するために必要なURL形式で表されます。

<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]

詳しくは以下を参照してください。

  • : HTTPプロキシではhttp 、HTTPSプロキシでは httpssockssocks4、異なるSOCKSプロトコルのプロキシではsocks5です。
  • : プロキシサーバーのIP、またはそのドメイン全体(proxydomain.comなど)。
  • : プロキシサーバーが受信するポート。
  • : プロキシ接続を認証するための任意のユーザー名。
  • : プロキシ接続を認証するための任意のパスワード。

はURLだけの必須部分という点に注意してください。セクションは任意ですが、通常は指定する必要があります。最後に、認証情報セクションの は、認証されたプロキシを扱う場合のみ必要です。

プロキシサーバーのURLがない場合はオンラインで無料で入手できます。ただし、無料のプロキシは信頼性が低く、データを大量に消費し、一貫性がなく、エラーが発生しやすく、怪しいという点にも留意してください。無料プロキシは学習目的であれば使用してもよいでしょう。。本番環境ではBright Dataのような一流プロバイダーが提供する信頼できる有料プロキシが必要です。

この記事の後半では、Bright Dataプロキシを取得してAIOHTTPで使用する方法について説明します。

HTTPプロキシの統合

付随資料に記載されているとおり、AIOHTTPはHTTPプロキシ統合をサポートしています。これを自分のHTTPプロキシのURLと考えてください。

http://190.6.23.219:999

以下のプロキシオプションを使用してAIOHTTPリクエストで指定できます。


async with aiohttp.ClientSession() as session:
    async with session.get(
        'https://example.com',
        proxy='http://190.6.23.219:999'
    ) as response:
        print(response.status)

これでAIOHTTPが、get ()関数のプロキシ引数として渡されたプロキシURLを介して、GETリクエストをルーティングするようになります。

1つのHTTPプロキシをHTTPとHTTPSの両トラフィックに使用可能な点に注意してください。

HTTPSプロキシの統合

HTTPSプロキシの場合、少し複雑になります。AIOHTTPの付随資料には以下が記載されています。

「Python 3.10では、 asyncioが使用するトランスポートのTLS 内TLSのサポートは無効になっています。Python の今後のリリース (v3.11 など) で1つの属性が切り替わった場合にはうまくいくでしょう™。

aiohttp v3.8以降では、この実現に向けた準備ができており、TLS内TLSをサポートするコードが用意されているため、HTTPSプロキシトンネルを介してHTTPSリクエストが送信されます」

つまり、AIOHTTPでHTTPSプロキシを使う際には、Pythonをバージョン 3.11 に、 aiohttpをv3.8 以降にアップグレードする必要があります。HTTPSのAIOHTTPプロキシ統合の手順は上記と同じです。唯一の変更点はプロキシプロトコルが https になり、 httpではなくなることです。

SOCKSプロキシの統合

初期状態のAIOHTTPはSOCKSプロキシをサポートしていません。AIOHTTPでSOCKSプロキシを使用する必要がある場合は、aiohtpp-socksをインストールしてください。

pip install aiohttp_socks

このライブラリはpython-socksを使用してSOCKS4(a)およびSOCKS5(h)サポートでAIOHTTPを拡張します。

これをSOCKSプロキシのURLと考えてください。

socks5://98.175.31.195:4145

そしてAIOHTTPで次のように使用します。


# initialize a SOCKS proxy connector
connector = ProxyConnector.from_url('socks5://98.175.31.195:4145')

# initialize an AIOHTTP client with the SOCKS proxy connector
async with aiohttp.ClientSession(connector=connector) as session:
    async with session.get('https://example.com') as response:
        print(response.status)

これでAIOHTTPが指定されたSOCKSプロキシ経由でGETリクエストをルーティングするようになります。

ProxyConnectoraiohttp-socks由来のため、インポートを忘れないでください。

from aiohttp_socks import ProxyConnector

舞台裏では、 aiohttp-socksAIOHTTPコネクターを定義し、リクエストを微調整してから指定された SOCKSプロキシを通過させます。

完全な例

これで、AIOHTTPでプロキシを使用する方法の説明が終わりました。完璧な例で上記のアプローチが機能することを確認しましょう!

わかりやすくするために、ここではHTTPプロキシを使用しますが、HTTPSやSOCKSでも簡単に以下の例を適用できます。

GETリクエストのターゲットURLは HTTPBinプロジェクトの /ipエンドポイントになります。このAPIは受信リクエストのIPを返します。したがって、プロキシ統合が成功すると、エンドポイントは自分のIPではなくプロキシサーバーのIPで応答します。

もう一度これが自分のHTTPプロキシサーバーのURLと見なしてください。

http://190.6.23.219:999

これをAIOHTTPに統合し、https://httpbin.io/ipのエンドポイントから返されたデータを以下で出力します。


import aiohttp
import asyncio

async def main():
    async with aiohttp.ClientSession() as session:
        # perform a GET request through an HTTP proxy
        async with session.get(
          'https://httpbin.io/ip',
          proxy='http://190.6.23.219:999'
        ) as response:
            # extract the response data and print it
            json = await response.json()
            print(json)

asyncio.run(main())

このスクリプトを実行すると次のようになります。


{
  'origin': '190.6.23.219'
}

これで完成です!これはプロキシサーバーのIPそのもので、AIOHTTPのプロキシ統合が魔法のように動作します。

: プロキシサーバーは短命です。このチュートリアルを読む頃には、選択したプロキシは動作せず、上記のスクリプトが使えなくなるでしょう。これを機能させるには、HTTPプロキシを有効な新プロキシに置き換えます。

AIOHTTPPプロキシの高度なユースケース

これでAIOTTPプロキシ統合の基本は押さえました。では、もっと複雑な手法はどうでしょうか?このセクションで詳細をご覧ください!

環境変数経由のグローバルプロキシ

AIOHTTPがサポートする使用プロキシの決定方法は2つです。

  1. プロキシ引数に渡されたプロキシURLを使用します。
  2. trust_envTrueに設定されている場合、 HTTP_PROXYHTTPS_PROXYの環境変数が読み込まれます。

この場合は以下の環境を設定することで、AIOHTTPでグローバルプロキシを設定できます。

  • HTTP_PROXY: HTTPリクエストに使用するプロキシサーバーのURL。
  • HTTPS_PROXY: HTTPSリクエストに使用するプロキシサーバーのURL。

たとえば、LinuxやmacOSでは次のコマンドを使用して設定します。


export HTTP_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]"
export HTTPS_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]"

次に、 trust_env=TrueaioHttp.ClientSession ()に渡します。

async with aiohttp.ClientSession(trust_env=True) as session:

これでプロキシ引数なしでsession.get ()を呼び出すことが可能です。


async with aiohttp.ClientSession(trust_env=True) as session:
    async with session.get('https://example.com') as response:
        print(response.status)

素晴らしい!AIOHTTPは、HTTPおよびHTTPSリクエストごとに環境変数で指定されたプロキシを使用します。

同じメカニズムがcURLプロキシでも機能するため、詳細についてはリンクをクリックしてください。

プロキシ認証のアプローチ

正確な認証情報を使わずに認証済みプロキシに接続しようとすると、 「407 プロキシ認証が必要です」というエラーが表示されます。

以下の文字列が認証済みHTTP プロキシに接続するURLだとします。

http://admin:[email protected]:8928

ここでのベアプロキシURLはこれです。

http://20.198.112.312:892

そして認証情報はこれです。

  • ユーザー名: 管理者
  • パスワード: PK5IP98NWP56L9SJY

AIOHTTPがサポートする認証済みプロキシの処理方法は2つです。

  1. プロキシURLで認証情報を直接指定する。

async with session.get(
  'https://example.com/',
  proxy='http://admin:[email protected]:8928'
) as response:

2. ユーザー名とパスワードの認証情報をaioHttp.BasicAuth ()オブジェクトに渡し、それをproxy_authオプションで使用する。


proxy_auth = aiohttp.BasicAuth('admin', 'pK5ip98NWp56l9sjy')
async with session.get(
    'https://example.com/',
    proxy="http://20.198.112.312:892",
    proxy_auth=proxy_auth
) as response:

素晴らしい!AIOHTTPプロキシ認証はもはや秘密ではありません。

SSL証明書エラーの回避

AIOHTTPでプロキシを設定すると、次のエラーが原因でリクエストが失敗する可能性があります。

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain 

このようなSSL証明書の問題を回避するには、 ssl=False でSSL承認を無効にしてください。


async with aiohttp.ClientSession() as session:
    async with session.get(
      'https://example.com',
      proxy='http://190.6.23.219:999',
      ssl=False # turn of SSL certificate verification
    ) as response:
        print(response.status)

これでAIOHTTPのSSL証明書の承認エラーがすぐに消えます。

AIOHTTPにおけるローテーションプロキシ

同じプロキシサーバーを繰り返し使用すると、ターゲットサイトが IPアドレスをブロックする可能性があります。これを回避するには、リクエストで必ず別のプロキシサーバーを使用するようにします。

以下がその方法です。

  1. Pythonリストに多数のプロキシURLを入力します。
  2. その中からリクエストごとにプロキシURLをランダムに選択しましょう。
  3. そして選択したプロキシURLをAIOHTTPで設定してください。

この方法の一番の問題はボイラープレートコードが関係していることです。また、信頼できるプロキシサーバーのプールにアクセスする必要があり、これは無料ではありません。幸いなことに、Bright Dataにはより効果的なソリューションがあります!Bright Dataのローテーションプロキシが自動的に出口IPアドレスを変更します。このプロキシは195か国で利用可能なうえ、並外れたネットワーク稼働率を誇り、99.9%の成功率を保証します。

次のチャプターでは、AIOHTTPでBrigh Dataのローテーションプロキシ の使い方を説明します。

AIOHTTPとBright Dataプロキシの統合

Bright Dataは世界最高のプロキシサーバーを管理しており、フォーチュン500の企業と2万人以上の顧客にサービスを提供しています。世界中に広がるプロキシネットワークには以下が含まれます。

これは世界で最大かつ最も信頼性の高いプロキシネットワークの1つです!

AIOHTTPでのBright Dataプロキシの使用方法を、以下の手順に則って説明します。

すでにアカウントをお持ちの場合はBright Dataにログインしてください。アカウントがない場合は、無料アカウントを作成してください。すると、次のユーザーダッシュボードにアクセスできるようになります。

以下のように[プロキシ製品を表示]ボタンをクリックします。

プロキシ製品を表示

すると、[プロキシとスクレイピングインフラストラクチャ]ページにリダイレクトされます。

下にスクロールして「住宅用プロキシ」カードを見つけたら、[開始]ボタンをクリックしてください。

レジプロキシ

住宅用プロキシ設定ダッシュボードが表示されます。ガイド付きウィザードに従って、必要なプロキシサービスを設定します。プロキシの設定方法に不安がある場合は、年中無休のサポートにお問い合わせください。

[アクセスパラメータ]タブに移動し、プロキシのホスト、ポート、ユーザー名、パスワードを次のように取得します。

アクセスパラメーター

[ホスト]フィールドにはすでにポートが含まれていることに注意してください。

プロキシURLを作成してAIOHTTPで使用するために必要な手順はこれだけです。すべての情報をまとめて、次の構文でURLを作成します。

<Username>:<Password>@<Host>

たとえば、この場合は次のようになります。

brd-customer-hl_4hgu8dwd-zone-residential:[email protected]:XXXXX

[アクティブプロキシ]を切り替えて、最後の指示に従えば準備完了です!

アクティブプロキシ

Bright Dataとの統合用AIOHTTPプロキシスニペットは以下のようになります。


import aiohttp
import asyncio

async def main():
    async with aiohttp.ClientSession() as session:
        # perform a GET request through an HTTP proxy
        async with session.get(
          'https://lumtest.com/myip.json',
          proxy='http://brd-customer-hl_4hgu8dwd-zone-residential:[email protected]:XXXXX'
        ) as response:
            # extract the response data and print it
            json = await response.json()
            print(json)

asyncio.run(main())

まとめ

このAIOHTTPプロキシ統合チュートリアルでは、プロキシを使用する理由と、aiohttpでプロキシを使用する方法について説明しました。これで、人気の高いPython HTTPクライアントライブラリのAIOHTTPでの、HTTP、HTTPS、SOCKSのプロキシ設定方法をご理解いただけたと思います。ここでご覧いただたように、必要なのは数行のコードだけです。

このガイドを読むことで、無料のプロキシサービスを使ってはいけない理由もご理解いただけたと思います。無料サービスではなく、評判の高いプロキシサービスプロバイダーが提供する信頼できるプロキシサーバーを採用すべきです。市場で最高のプロバイダーとは?Bright Dataです!AIOHTTPプロキシ統合手順は同じですが、有料プロキシのメリットは無限です。