HTTP / HTTPS プロキシ(明示手順)
ライブラリが発行する すべての HTTP 呼び出しを、プロセス共通のプロキシ経由にします。
対象例: search / item / guest PFAT / poller backends / purchase / Discord webhook / Gemini / webapp が使うクライアント。
1. いちばん簡単なやり方
import mercari
# ★ 最初に呼ぶ(Client 生成より前が安全)
mercari.set_proxy("http://127.0.0.1:8080")
c = mercari.MercariClient() # dry_run=False でライブ時にプロキシ使用
result = c.search(keyword="iPhone", category_id=3833, sort="新しい順")
print(result.get("mode"), len(result.get("items") or []))
認証付きプロキシ:
mercari.set_proxy("http://user:password@proxy.example.com:3128")
2. クライアント生成時
c = mercari.MercariClient(proxy="http://127.0.0.1:8080")
print(c.auth_status()["proxy"])
# {
# "enabled": true,
# "http": "http://127.0.0.1:8080",
# "https": "http://127.0.0.1:8080",
# "trust_env": false
# }
proxy= は内部で set_proxy と同じ プロセス全体 設定になります。
3. 環境変数
export HTTP_PROXY=http://127.0.0.1:8080
export HTTPS_PROXY=http://127.0.0.1:8080
# export NO_PROXY=localhost,127.0.0.1
import mercari
mercari.apply_proxy_from_env() # 必須: 明示的に読む
c = mercari.MercariClient()
または:
mercari.configure_proxy(trust_env=True)
4. HTTP / HTTPS で別プロキシ
mercari.configure_proxy(
http="http://proxy-for-http:8080",
https="http://proxy-for-https:8080",
)
HTTPS 先へも通常は HTTP プロキシ + CONNECT です(URL は http://... で指定)。
5. 解除
mercari.clear_proxy()
# または
mercari.set_proxy(None)
6. CLI / ポーラ
mercari --proxy http://127.0.0.1:8080 --live search -k iPhone -c 3833
python -m mercari.poller --proxy http://127.0.0.1:8080 --once -c 3833
# 高度な condition JSON + プロキシ
mercari --proxy http://127.0.0.1:8080 --live search \
--condition-json ./cond.json
7. webapp で使う
import mercari
mercari.set_proxy("http://127.0.0.1:8080")
# その後
# python -m webapp.app
または:
from webapp.app import create_app
from mercari import MercariClient
app = create_app(client=MercariClient(proxy="http://127.0.0.1:8080"))
仕組み(内部)
mercari.set_proxy(url)
│
▼
urllib.request.ProxyHandler({http, https})
│
▼
mercari.http.urlopen(...) ← client / backends / items / guest / ...
dry_run=True のときは ネットワークしない のでプロキシは使いません。
ライブ検索でプロキシを確認してください。
注意
| 項目 | 内容 |
|---|---|
| スコープ | プロセス全体(複数 Client で共有) |
| パスワード表示 | auth_status()["proxy"] では user:pass を *** マスク |
| SOCKS | 標準ライブラリのみでは未対応(HTTP プロキシ URL を想定) |
| 証明書 | 企業 SSL インターセプトは OS/Python の CA 設定が別途必要 |
トラブル
- 繋がらない → プロキシ URL に
http://スキームを付けた。127.0.0.1:8080だけでも自動でhttp://が付きます。 - プロキシを通っていない →
dry_runになっていないか。c.auth_status()["proxy"]["enabled"]がTrueか。 - 401/403 → プロキシの問題ではなくメルカリ側ゲートのことが多い(DPoP ゲストは別途)。