【Python】urllibでプロキシ設定

f:id:tm200:20210915184401p:plain

urllibで社内のプロキシサーバーを経由して外部接続という処理を実装しました。
外部接続先のAPIBasic認証が必要で、少し詰まったのでメモ。
requestsモジュールだと、プロキシ設定 + 接続先でBasic認証が上手く動かなかった為、urllibモジュールを使用しています。
上手いやり方などあれば、教えてください😊

実装

import os
import base64
import json
import urllib.request


def exec_proxy_request(usename: str, passwd: str, token: str):

    user_pass = f'{usename}:{passwd}'
    header = {
        # アクセス先のBasic認証
        'Authorization': f"Basic {base64.b64encode(user_pass.encode('utf-8')).decode('utf-8')}"
        # プロキシサーバの認証情報、必要に応じて
        'Proxy-Authorization': f'Bearer {token}'
    }

    req = urllib.request.Request('<アクセス先URL>', headers=header, method='GET')
    # プロキシの設定
    req.set_proxy('xxx.proxy.jp', 'http')
    req.set_proxy('xxx.proxy.jp', 'https')

    with urllib.request.urlopen(req) as res:
        status_code = res.getcode()
        res_body = res.read().decode('utf-8')

        if not status_code == 200:
            raise Exception(res_body)

        json_data = json.loads(res_body)

    return json_data