2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MicroAd (マイクロアド)Advent Calendar 2024

Day 5

PythonのRequestsで認証付きプロキシを使う方法を複数紹介

Last updated at Posted at 2024-12-09

PythonのRequestsライブラリで認証付きプロキシを使う方法は複数あります。
状況によって使い分けが必要なので今回の記事でまとめました。

URLに認証情報を入れる方法

一番オーソドックスな方法です。

ただ、Basic認証をサポートしているプロキシサーバのみで可能で、Digest認証などでは別の方法を選ぶ必要があります。

import requests
proxies = {
  "http": "http://user:pass@proxy.example.com:8080",
  "https": "http://user:pass@proxy.example.com:8080",
}
response = requests.get("http://example.com", proxies=proxies)
print(response.text)

HTTPヘッダーに認証情報を入れる方法

HTTPリクエストヘッダーの方に認証情報を入れる方法です。
この方法ではBasic認証だけでなく、Digest認証などセキュリティが高い方法を選択することもできます。

Basic認証

Basic認証の情報をHTTPヘッダーに含める必要がある場合は下記のようにします。
ただ、この方法はUnicode文字が認証情報含まれている場合うまく動きません。
その場合は、後述する「自力でHTTPヘッダーに認証情報を入れる方法」を検討してください。

import requests
from requests.auth import HTTPProxyAuth

proxies = {
  "http": "http://proxy.example.com:8080",
  "https": "http://proxy.example.com:8080",
}
auth = HTTPProxyAuth("user", "pass")

response = requests.get("http://example.com", proxies=proxies, auth=auth)
print(response.text)

Digest認証

Digest認証はBasic認証に比べて認証情報をハッシュ化するのでセキュリティが向上した方式です。
こちらの認証方法を行う必要がある場合は以下のようにします。

import requests
from requests.auth import HTTPDigestAuth

proxies = {
  "http": "http://proxy.example.com:8080",
  "https": "http://proxy.example.com:8080",
}
auth = HTTPDigestAuth("user", "pass")

response = requests.get("http://example.com", proxies=proxies, auth=auth)
print(response.text)

ほかにRequestsではBearer認証などにも対応しています。

自力でHTTPヘッダーに認証情報を入れる方法

Requestsでは認証情報にUnicode文字が含まれている場合エラーになります。
その場合、認証ヘッダーを自力で構築する必要があります。

import requests
import base64

proxies = {
  "http": "http://proxy.example.com:8080",
  "https": "http://proxy.example.com:8080",
}

auth = "user:pass"
encoded_auth = base64.b64encode(s.encode()).decode()
headers = {
  "Proxy-Authorization": f"Basic {encoded_auth}",
}

response = requests.get("http://example.com", proxies=proxies, headers=headers)
print(response.text)
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?